[英]add method with dot and with prototype
我有以下代碼
(function() {
var sayHello;
sayHello = (function() {
//add method to SayHello?
SayHello.load = function() {
var s = new SayHello();
return s;
};
//SayHello constructor
function SayHello() {
this.text = "hello";
}
//add method to SayHello
SayHello.prototype.print = function(selector){
var elm = document.querySelector(selector);
elm.innerHTML = this.text;
};
return SayHello;
})();
window.s = sayHello;
})();
我不明白為什么代碼在將函數分配給“SayHello.load”而不是“SayHello.prototype.load”時有效。 並且將函數分配給“SayHello.prototype.print”可以工作但“SayHello.print”不能。
我不明白為什么代碼在將函數分配給“SayHello.load”而不是“SayHello.prototype.load”時有效。
SayHello.load
與SayHello.prototype.load
因為在第一個中您將屬性添加到 SayHello 對象中,而在第二個中您將其添加到 SayHello 的原型中。
所以當你做
var obj1 = new SayHello();
在第一種情況下( SayHello.load
)obj1 將沒有 load 屬性,但在第二種情況下( SayHello.prototype.load
)它將有。
現在這意味着當你執行 SayHello.load 時,你基本上是在處理一個變量,它的初始化被提升到函數的頂部。 換句話說,變量SayHello
已經初始化,但構造函數SayHello
還沒有定義。
這就是為什么你之前不能做SayHello.prototype.load
function SayHello()
{
this.text = "text";
}
但是你可以做SayHello.load
因為它不涉及SayHello
構造函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.