使用返回对象的对象构造函数.它是如何工作的

Using Object constructors that return objects. How it works?

本文关键字:对象 何工作 工作 返回 构造函数      更新时间:2023-09-26

我一直在创建JS对象,像这个a = {}或这个a = new MyConstructor()没有考虑太多。

然后我编写了如下代码:

function Constructor(){
    var private = {
          a:1,
          b:2
    };
    return private;
}

var a = new Constructor();

a现在自然包含了private对象的一个新实例。然后我意识到new运算符是不需要的,因为每次调用Constructor函数时都会创建private对象。

所以实际的问题是:调用new Constructor()时会发生什么?

为什么不直接做a = Constructor()呢?

如果Constructor对象有公共属性,会发生什么?

从构造函数返回对象是个坏主意吗?

调用new Constructor()时会发生什么?

请查看new操作符和What is the 'new'关键字在JavaScript?问题。

创建一个实例(如Object.create(Constructor.prototype)),它可以通过Constructor函数中的this访问。然而,调用的结果将仅仅是返回的对象(private),它被赋值给a

为什么不直接做a = Constructor()呢?

实际上,你应该这样做。Constructor不是构造函数,它不创建实例——它只是返回private对象。因此,不要使用new。然而,你也应该重命名函数,使其清晰,例如为makeXYZ()

Constructor对象的公共属性会发生什么任何?

ab是返回对象的"公共"属性。
如果你指的是Constructor函数本身的"静态"属性,那么它们不会发生任何变化。
如果您指的是Constructor.prototype上的"共享"属性-它们不会发生任何事情,它们不会被返回的对象继承(这可能不是预期的)。

从构造函数返回对象是个坏主意吗?

来自构造函数,是的。
从一般的函数来看,没有。让它成为一个普通的工厂函数(即返回对象的函数),这是一个很好的模式。

你面对的是" NativeObject" javascript模式。它模拟了一些OOP范例,如封装、多态、继承、抽象等。

使用"new"关键字创建对象的新实例,在JS中可以是

var function_example = function() {
var privateField = 11;
var publicField = 22;
return {
publicField: publicField
}    
}

所以,当你想要获取对象时你可以调用这个函数:

var object = function_example();

如果你想把function作为委托,并给它分配一个引用,你可以:

var function2_axample = function_example;

如果你想创建一个新的实例,你应该:

var instance = new function_example();
var publicValue = instance.publicField;

所以,你可以记住,与OOP范式相比,它是这样的:函数-它是类,新函数-它是实例。