我有以下代码:
(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"时,我不明白为什么代码有效。但不是#34; SayHello.prototype.load"。并将功能分配给" SayHello.prototype.print"可以工作,但是#Say; SayHello.print"不能。
答案 0 :(得分:1)
我不明白为什么代码在分配函数时有效 “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
的构造函数。