[英]javascript prototype object
1。
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype = {protest:"maizere"};
[ myobject instanceof MyConstructor, // false !
myobject.constructor == MyConstructor, // true !
myobject instanceof Object ] // true
console.log(myobject.protest) //undefined
這證明myobject不再繼承MyConstructor原型的屬性和方法。
但是請參見下面的下一個代碼:
2。
function MyConstructor() {}
var myobject = new MyConstructor();
MyConstructor.prototype.protest= "Maizere";//Do this line gets hoisted?or something else
[ myobject instanceof MyConstructor, // true!
myobject.constructor == MyConstructor, // true !
myobject instanceof Object ] // true
console.log(myobject.protest) //Maizere
為什么會發生這種情況?內部原型的確切定義是什么?即使在實例化對象后, proto仍在引用MyConstructor原型,這也證明了事實;如果這樣,為什么first(1。)代碼未引用MyConstructor原型呢? 由於該屬性是在第二個代碼中的對象實例化之后添加的,並且該對象的內部原型已接收到該屬性,因此這意味着我們可以稍后更改原型屬性,並仍然在實例中看到效果。但是相同的定義不起作用在第一個代碼中替換原型屬性時?
我對此可能是錯的,但是當您這樣做時:
MyConstructor.prototype = {protest:"maizere"};
您正在使用匿名對象定義覆蓋原型,因此,當您僅添加新屬性時,例如:
MyConstructor.prototype.protest= {"Maizere"};
您的課程保留其原型,並且像一個魅力一樣工作。
MyConstructor.prototype =
覆蓋整個prototype
對象。
instanceof
運算符測試對象在其原型鏈中是否具有構造函數的prototype屬性
http://jsfiddle.net/ExplosionPIlls/xtqhp/
function MyConstructor () {}
MyConstructor.prototype = {'xyz': 'zyx'};
//true
console.log((new MyConstructor) instanceof MyConstructor);
function MyConstructor2 () {}
var mc2 = new MyConstructor2;
MyConstructor2.prototype = {'xyz': 'zyx'};
//false
console.log(mc2 instanceof MyConstructor2);
順便說一句, MyConstructor.prototype.protest = {"Maizere"};
是無效的語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.