-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 に答える