说明
Object.create() 方法可以创建对象。
第一个参数是为即将创建好的对象指定原型,
第二个参数是一个对象,同Object.defineProperties()的第二个参数一样。
区别
同样是创建对象关于{} 与 new Object() 与 Object.create() 三者之间的区别,我查了不少博客后我所理解的区别:
当Object.create()的第一个参数为null时 不会继承Object的原型链上的属性 可以自己打印看看是空的{}。
new Object() 和 {} 是完全一样的。
使用
var Obj ={ name:'mini', age:3, show:function () { console.log(this.name +" is " +this.age); } } // 上面的Obj对象就是下面MyObj的原型 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" }, // 获取对象hate属性时触发的方法 set:function (value) { // 设置对象hate属性时触发的方法 console.log(value,2222); return value; } } });
继承
在讲解Object.create方法在构造函数上的应用之前我们先来回顾构造函数的继承
var Animal=function () {} Animal.prototype.show=function () { console.log("animal"); } var Dog = function () { } var subClass = function () {} subClass.prototype = Animal.prototype; Dog.prototype = new subClass(); // 继承Animal
以上代码是我们实现继承最常用的一种方式,这种方式是借助于一个代理函数,通过继承构造函数的实例来继承构造函数上的属性 。
通过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