gpt4 book ai didi

javascript - 在 JavaScript 中使用 apply() 链接构造函数?

转载 作者:行者123 更新时间:2023-11-29 16:32:47 24 4
gpt4 key购买 nike

我正在 MDN 中学习 apply() ,有一个我无法弄清楚的例子:

// Create constructor method for array of args
Function.prototype.construct = function(aArgs) {
var oNew = Object.create(this.prototype);
this.apply(oNew, aArgs);
return oNew;
};

this.apply(oNew, aArgs) 是做什么的?

最佳答案

首先:这个函数的目的是什么?

目标

这个原型(prototype)函数constructor被定义为提供 new 的替代方案。哪里new Person(a,b)将需要这样的参数,此函数提供了一种将这些参数作为数组传递的方法。

旁注:应该说扩展语法使得这样的功能变得不必要,因为我们可以像这样传递这样的数组: new Person(...[a,b]) 。但是好吧...

使用示例

假设我们有一个构造函数:

function Person(name, gender) {
this.name = name;
this.gender = gender;
}

我有一个带有参数的数组:

var args = ["Helen", "F"];

那么我们可以这样做:

var person = new Person(args[0], args[1]);

但是我们想通过args作为单一参数。现在这个原型(prototype)函数将帮助我们实现这一点。我们现在可以做:

var person = Person.construct(args);

// Create constructor method for array of args
Function.prototype.construct = function(aArgs) {
var oNew = Object.create(this.prototype);
this.apply(oNew, aArgs);
return oNew;
};

function Person(name, gender) {
this.name = name;
this.gender = gender;
}

var args = ["Helen", "F"];

var person = Person.construct(args);

console.log(person);

它是如何工作的

调用Person.construct(args)this对象将是 Person ,即我们的构造函数。

然后完成以下操作:

var oNew = Object.create(this.prototype);

这将创建一个Person对象,但实际上没有调用构造函数 Person ,因此该对象未初始化。它只是一个空对象,是 Person 的实例。 .

所以我们需要以某种方式调用Person根据我们的论点。我们可以使用apply为此:

this.apply(oNew, aArgs);

回想一下thisPerson ,所以我们调用Person此处通过applyapply使得可以调用具有特定 this 的函数对象值(我们新创建的 Person 实例)和数组形式的参数——正是我们所需要的。

因此上面将使用 name 初始化我们的空对象和gender参数,完成通常使用 new 进行的完整创建和初始化.

关于javascript - 在 JavaScript 中使用 apply() 链接构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54305004/

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