Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改“this”的值_Javascript - Fatal编程技术网

Javascript 更改“this”的值

Javascript 更改“this”的值,javascript,Javascript,我有这个功能: 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 这是不可能的。 双关语 数字是不变的。在某种程度上可以做到这一点。数字是通过值传递的,而不是引用。所以你最多可以称为y=x.f;使用此功能: Number.prototype.f = function() { retur

我有这个功能:

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

这是不可能的。 双关语


数字是不变的。

在某种程度上可以做到这一点。数字是通过值传递的,而不是引用。所以你最多可以称为y=x.f;使用此功能:

Number.prototype.f = function() { return 2; };
关于你的评论:

当我们做array.push2时;函数push改变数组

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

Array.prototype.push = function(val) {
    var t = this;
    t[t.length] = val;
};

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

因此,有一项谅解是:


​我只在Chrome上测试过它。

你确定吗?当我们做array.push2时;函数push改变数组@user1342369:是的,因为数组是要更改的数据结构。一个数字总是同一个数字,它的标识不会改变或依赖于任何东西。@user1342369:这是因为数组不是不可变的。你不会。整个概念是疯狂的。你可能有一个,但你需要问一个问题,解释你的用例。如果我想做这样的函数:X.Poy,结果在席里思考,因为它更美丽的第一个。way@user1342369-关于什么构成美丽代码的观点并不胜过编写习惯代码。@user1342369:这是最邪恶的行为之一我很久以前就看到过这样的想法。不要这样做!最好解释一下你为什么需要这样做。可能有更好的方法。如果x是基本类型数字,字符串是主要类型,则不需要通过引用复制数组->newarr=arr.slice0
Number.prototype.f = function () {
    this.toString = function () {
        return "2";
    };
}
var x = new Number(0);
x.f();
alert(x);