运行这个简单的JavaScript代码时没有警报提示?

时间:2011-11-14 04:08:29

标签: javascript

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代码时会出现无警报提示?

2 个答案:

答案 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会起作用。