运行这段简单的javascript代码时没有提示

there is no alert prompt when run this simple javascript code?

本文关键字:代码 javascript 提示 段简单 简单 运行      更新时间:2023-09-26
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代码时没有警告提示?

正确的代码应该是

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和foo.prototype.value。值为6的值

或者,如果意图是创建一个新对象,那么该对象将继承addValue函数,因此调用new foo()。addValue作品。

那么,重构你的代码会得到:

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()调用时的作用域问题