gpt4 book ai didi

JavaScript构造函数替代

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:06:48 24 4
gpt4 key购买 nike

由于无法将 new 运算符与 arguments 数组(.call 或 .apply)一起使用,所以我想知道我是否可以手动完成。

在下面的代码中,obj1obj2 是否等价(在 ES3 中)?

function MyClass(a, b, c) {}

var obj1 = new MyClass(2,3,4)

var tmp = function() {}
tmp.prototype = MyClass.prototype;
var obj2 = new tmp;
obj2.constructor = MyClass;
MyClass.call(obj2, 2,3,4);

- edit1 -

你的回答是否意味着上面的代码是错误的或者不等同于对象构造?

最佳答案

使用以下语法,您应该能够直接应用/调用构造函数而不会出现太多问题。或者在不使用 new 运算符的情况下实例化它。

function MyClass(a,b,c){
if (!(this instanceof MyClass)){
return new MyClass(a,b,c)
}
// to demonstrate the arguments are usable using call/apply
this.arg1 = a;
this.arg2 = b;
this.arg3 = c;
}

var obj2 = MyClass.call(null,1,2,3); // or MyClass.apply(null,[1,2,3])
alert([obj2.arg1,obj2.arg2,obj2.arg3].join(',')); //=> 1,2,3

关于JavaScript构造函数替代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5569513/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com