1.創(chuàng)建對象的方式饺窿,Object.create 和new來說明
var Base = function () {}
var o1 = new Base();
var o2 = Object.create(Base);
- Object.create的實現(xiàn)方式:
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
簡單來說就是內(nèi)部創(chuàng)建一個空函數(shù),將函數(shù)的prototype指向傳參的對象,然后返回new的實例。
- new Base()的時候new做了什么?
var o1 = new Object();
o1.__proto__ = Base.prototype;
Base.call(o1);
簡單來說:新建一個obj對象o1握截,并且讓o1的__proto__
指向了Base.prototype
對象。并且使用call
進(jìn)行強轉(zhuǎn)作用環(huán)境烂叔。
總結(jié):
-
Object.create
沒有指向他的prototype
谨胞,所以訪問不到Base原型上的屬性。 - 這也就說明了
__proto__
和prototype
的區(qū)別蒜鸡。所以上面在prototype定義的a胯努,只是Base的prototype
對象上的一個屬性。 - new關(guān)鍵字必須是以function定義的逢防。
- Object.create 則 function和object都可以進(jìn)行構(gòu)建叶沛。
上一篇:前端筆記一(proto,prototype忘朝,constructor)
下一篇:前端筆記三(js創(chuàng)建對象的方式)