淺談Object.create
阿新 • • 發佈:2018-02-19
blog gpo log 百度 fun 一段 creat proto 什麽
在網上發現了Object.create的用法,感覺很是奇怪,所以學習記錄下
1 var o = Object.create(null); 2 console.log(o); // {} 3 o.name = ‘jian‘; 4 var o2 = Object.create(o); 5 console.log(o2); // {} 6 console.log(o2.name); // ‘jian‘,
百度了一下原理:
1 Object.create = function (o) { 2 var F = function () {}; 3 F.prototype = o; 4 return new F();5 };
再看一段代碼:
1 var Base = function () {2 } 3 Base.prototype.a = 3; 4 var o1 = new Base(); 5 var o2 = Object.create(Base); 6 console.log(o1.a);//3 7 console.log(o2.a);//undefined
8 o2.__proto__.prototype.a//3
為什麽呢:因為o2的原型鏈中並沒有a這個屬性但是根據之前代碼Object.create的原理來看return new F();
那麽假設這個o2=new F();因此可以推出o2.__proto__ = F.prototype=Base(此原理請參見之前文章面向對上中的圖二),而Base.prototype.a = 3;
因此o2.__proto__.prototype.a=3
淺談Object.create