js 继承

演示模式

var proto={
    describe:function(){
        return 'name'+this.name
    }
};

var obj={
    [[Prototype]]:proto;
    name:'Jane'
}

实际办法

var proto={
    describe:function(){
        return 'name'+this.name
    }
};
var obj=Object.create(proto)
obj.name='Jane';
obj.describe()//"nameJane"

检查一个对象是否是另一个对象的原型

var A={};
var B=Object.create(A);
var C=Object.create(B);
A.isPrototypeOf(C)//true
C.isPrototypeOf(A)//false
B.isPrototypeOf(A)//false
A.isPrototypeOf(B)//true

设置和删除仅影响自身属性

var proto={foo:'a'}
var obj=Object.create(proto);
obj.foo//"a"
obj.hasOwnProperty('foo')//false
obj.foo='b';//"b"
obj.foo//"b"
obj.hasOwnProperty('foo')//true
proto.foo//"a"
var proto={foo:'a'}
var obj=Object.create(proto);
delete obj.foo//true
obj.foo//"a"

遍历属性

var proto={foo:'a'}
var obj=Object.create(proto);
obj.name='jane';
Object.getOwnPropertyNames(obj)//["name"]
Object.keys(obj)//["name"]
for (var key in obj){
    console.log(key)}
VM13345:2 name
VM13345:2 foo

覆写

var proto={
    describe:function(){
        return 'name'+this.name
    }
};
var obj=Object.create(proto)
obj.name='Jane';
obj.describe=function(){
    return 'overwrite'
}
obj.describe()//"overwrite"

你可能感兴趣的:(js 继承)