gpt4 book ai didi

javascript - 理解链构造函数中的 Function.prototype.apply 方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:42 25 4
gpt4 key购买 nike

我不知道怎么问这个问题。我认为使用示例会更好理解:(我从 MDN 获取的 this 示例)

Function.prototype.construct = function (aArgs) {
var oNew = Object.create(this.prototype);
this.apply(oNew, aArgs);
return oNew;
};
function MyConstructor() {
for (var nProp = 0; nProp < arguments.length; nProp++) {
this['property' + nProp] = arguments[nProp];
}
}

var myArray = [4, 'Hello world!', false];

我可以使用两种方式创建对象:

  1. var obj1=new MyConstructor(4,'Hello world!', false);
  2. var myInstance = MyConstructor.construct(myArray);

使用这两种方式创建对象有什么区别?为什么我们使用 apply 方法在链构造函数中创建对象以及使用第二种方式创建对象的优势是什么?

最佳答案

what is the difference between creating object using these two way ?

从根本上说,区别在于您是将参数作为离散参数 (#1) 还是作为数组 (#2) 提供。另外,第一种方式是标准的、普通的 JavaScript;第二个要求您扩展 Function 原型(prototype)。

why we use apply method to create object in chain constructor

因此参数被传递给构造函数,就好像它们是作为离散参数提供的一样。

这是相当复杂的代码,所以一个简单的例子来说明 Function#apply 的作用可能会有用。让我们来看一个无聊的函数:

function foo(a, b, c) {
console.log(a);
console.log(b);
console.log(c);
}

现在,让我们用离散参数调用它:

foo(1, 2, 3);

...这给了我们

123

Now, let's use apply (ignore the null for now):

var a = [1, 2, 3];
foo.apply(null, a);

我们得到相同的结果:

123

Function#apply 接受用作 this 的值作为第一个参数,调用的参数作为数组(或类似数组的对象)在第二个参数,并使用该 this 值和参数调用函数。

and what is advantage of creating object using 2nd way ?

只是您可以为参数使用数组,而不是单独列出它们。

关于javascript - 理解链构造函数中的 Function.prototype.apply 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731867/

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