演示模式
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"