ES6最新的Object.create语法是 创造一个对象 可以传参,参数为一个对象,得到的结果是一个克隆的对象,
实际上 这是基于原型的克隆 分析如下:
var a={b:1}; var a1 = Object.create(a);
console.log(a1);
在控制台上我们得到这样的结果:
也就是说 a1本身是没有b属性的,为了验证这一点,我们可以采用 hasOWnProperty来检验(hasOwnProperty只会在当前对象中查找属性,不会在其原型上查找属性)
console.log(a1.hasOwnProperty('b')); //false
此时打印 a1.b却能够取到值 1,说明a1的b属性是在其原型链a上找到的;
因此我们可以假设 Object.create是这样的一个函数(为了区分写成creates)
Object.prototype.creates = function(oldobj){ let newobj = {}; newobj.__proto__ = oldobj; return newobj; }
尝试:
Object.prototype.creates = function(oldobj){ let newobj = {}; newobj.__proto__ = oldobj; return newobj; } var a={b:1}; var a1=Object.creates(a); console.log(a1)
结果: