var foo = function(){};
foo.prototype.value = 5;
foo.prototype.addValue = function(){ foo.value = 6; }
function bar(func)
{
func(); // I'm running the function!
}
bar(foo.addValue); // pass in the function
alert(foo.value); // it's now 6!
为什么运行此JavaScript代码时会出现无警报提示?
答案 0 :(得分:0)
好吧,重构代码会给出:
var foo = {
value: 5,
addValue: function(){
foo.value = 6;
}
};
function bar(func){
func(); // I'm running the function!
}
bar(foo.addValue); // pass in the function
alert(foo.value); // it's now 6!
设置foo.prototype.addValue
无法帮助您定义foo.addValue
。
使用foo.value
代替this.value
的原因是通过bar()
答案 1 :(得分:0)
正确的代码应该是
var foo = function(){};
foo.prototype.value = 5;
foo.prototype.addValue = function(){ foo.value = 6; }
function bar(func)
{
func(); // I'm running the function!
}
bar(foo.prototype.addValue); // pass in the function
alert(foo.value);
或
var foo = function(){};
foo.prototype.value = 5;
foo.prototype.addValue = function(){ foo.value = 6; }
function bar(func)
{
func(); // I'm running the function!
}
bar(new foo().addValue); // pass in the function
alert(foo.value);
由于您声明了一个名为addValue的原型,因此foo本身不包含addValue。要引用该函数,必须使用foo.prototype.addValue。请注意,在这种情况下,foo包含值为5的foo.prototype.value和值为6的foo.value。
或者,如果打算创建一个新对象,那么该对象将继承addValue函数,因此调用new foo()。addValue会起作用。