gpt4 book ai didi

javascript - 在javascript中创建类似 "new"的变量

转载 作者:行者123 更新时间:2023-11-28 15:19:02 24 4
gpt4 key购买 nike

我是 JavaScript 新手;我正在深入研究"new"变量。

我的问题是:

function Fruit(name)
{
this.name = name;
}

function myNew(con,args){
var obj = {};
obj = con.apply(obj,args) || obj;
obj.constructor = con;
return obj;
}

var f1 = new Fruit("Mango");
var f2 = myNew(Fruit,["Orange"]);

console.log(f1.name, f1 instanceof Fruit);
console.log(f2.name, f2 instanceof Fruit);

现在我得到的输出是:

芒果真

橙色假

如果我需要输出,我需要做什么:芒果真橙色真..

我需要一些解释。

我不知道是否有人已经回答了这个问题,但我找不到它。

最佳答案

假设我们有 Foo 构造函数。

function Foo(options) {
// constructor
this.name = options.name;
}

// and create instance of it
var foo = new Foo({name: "Foo"});

根据 MDN 引用,“new”运算符的作用是:

  1. 创建一个新对象,继承自 Foo.prototype。
  2. 使用指定的参数调用构造函数 Foo,并将 this 绑定(bind)到新创建的对象。 new Foo 相当于 new Foo(),即如果未指定参数列表,则不带参数调用 Foo。
  3. 构造函数返回的对象成为整个new表达式的结果。如果构造函数没有显式返回对象,则使用步骤 1 中创建的对象。 (通常构造函数不返回值,但如果想要覆盖正常的对象创建过程,则可以选择这样做。)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new

所以基本上它设置对象原型(prototype)并执行构造函数,返回一个对象,除非构造函数不返回任何其他内容。

“apply”函数仅在特定上下文中运行函数。它没有设置继承。在您的情况下,它只是在您的自定义对象的上下文中运行构造函数。

var obj = {};

你可以在这个 fiddle 上看到这一点:

http://jsfiddle.net/hp244jn7/

使用“_ proto _”属性来查看原型(prototype)链中的内容。不要在开发中使用它。

如果您想要达到预期的效果,您可能应该使用giorgio建议的内容。

关于javascript - 在javascript中创建类似 "new"的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32328456/

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