Object.create(null) 建立的对象是一个空对象,在该对象上没有继续 Object.prototype 原型链上的属性或许要领
比方:toString(), hasOwnProperty()等要领
参数 | 申明 |
---|---|
obj | 建立对象的原型,示意要继续的对象 |
propertiesObject(可选 ) | 也是一个对象,用于对新建立的对象举行初始化 |
我们来看看底层完成
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
下面我们来看详细运用:
//建立一个Obj对象
var Obj ={
name:'mini',
age:3,
show:function () {
console.log(this.name +" is " +this.age);
}
}
//MyObj 继续obj, prototype指向Obj
var MyObj = Object.create(Obj,{
like:{
value:"fish", // 初始化赋值
writable:true, // 是不是是可改写的
configurable:true, // 是不是能够删除,是不是能够被修正
enumerable:true //是不是能够用for in 举行罗列
},
hate:{
configurable:true,
get:function () { console.log(111); return "mouse" }, // get对象hate属性时触发的要领
set:function (value) { // set对象hate属性时触发的要领
console.log(value,2222);
return value;
}
}
});
划重点:这里get和set 要领好像还包含更大的潜力 。我们能够应用它们去完成数据的过滤和数据的绑定 。完成一些简朴的mvvm的结果
Object.create继续的运用:
var A = function () { };
A.prototype.sayName=function () {
console.log('a');
}
// B的实例继续了A的属性
var B = function () { };
B.prototype = Object.create(A.prototype);
var b = new B();
b.sayName(); // a
划重点:相对于组织函数的继续Object.create继续完成了将A,B的原型圆满分开 。两边不会相互影响。这是Object.create亮点地点