1. 程式人生 > >淺談Object.create

淺談Object.create

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