你試圖做的是什麼將被稱爲其他語言的類靜態方法。
要做到這一點在Javascript中你必須寫
Class.CONST = 1;
那麼你就可以Class.CONST;
調用它,如果你試圖用實例方法來訪問它像new Class().CONST
,這將是不確定的
返回到您的問題,Class.prototype中的所有內容只能通過對象的實例(即通過new
創建)訪問,而不是Class本身。爲什麼?
考慮的new
Function.method('new', function() {
var that = Object.create(this.prototype);
var other = this.apply(that, arguments);
return (typeof other === 'object' && other) || that;
});
第一Object.create(this.prototype)
實施創建從this.prototype
繼承了一個全新的對象其中U通過Class.prototype = { Const : 1 }
聲明,那麼它叫this.apply(that, arguments)
,它只是用that
作爲this
打電話給你的聲明類功能變量。然後它返回對象。你可以看到Class函數只是用來通過new
將事物填充到新創建的對象中。只有創建的對象才能訪問原型方法。
我沒有足夠的信心把它放在一個答案中,但我會說,類沒有原型鏈......它是一個構造函數。作爲Class實例的對象具有您使用'Class.prototype = ...'創建的原型鏈。換句話說,'Class.prototype'沒有引用'Class'對象的原型鏈,而是引用'Class'構造函數創建的對象的原型鏈。 – LarsH
@LarsH - 我很確定函數對象有原型鏈。然而,你的評論的第二部分,很多都是澄清的。我正在將'Class'的'prototype'屬性與原型鏈混合在一起。 –
特德,我不否認函數對象有原型鏈......只是A.原型是對象A的原型鏈(我同意你的看法)。 – LarsH