-3

我有这个功能:

Number.prototype.f=function()
{
    this=2;//This is not working
}
var x=0;
x.f();
alert(a);//Here I want that x equal 2

我希望 x 最后是 2 !

4

3 回答 3

2

某种程度上可以做到。数字是按值传递的,而不是引用。所以充其量你可以y = x.f();用这个函数调用:

Number.prototype.f = function() { return 2; };

至于你的评论:

当我们做 array.push(2); 函数 push 改变了数组!

当然可以。数组是对象,通过引用传递。该函数可能如下所示:

Array.prototype.push = function(val) {
    var t = this;
    t[t.length] = val;
};
于 2012-04-19T13:25:25.220 回答
1

您不能精确地做到这一点,但您可以通过显式使用 Number 构造函数并覆盖该toString方法来获得类似的效果。

所以,在理解这是病态的,不应该在生产代码中看到

Number.prototype.f = function () {
    this.toString = function () {
        return "2";
    };
}
var x = new Number(0);
x.f();
alert(x);

​我只在 Chrome 中测试过。

于 2012-04-19T13:29:17.170 回答
0

这是不可能的。
(双关语)

数字是不可变的。

于 2012-04-19T13:22:42.243 回答