Javascript: 用链调用new实例化一个对象

Javascript: instantiate an object with chain calling new

是否可以实例化一个对象并对其调用 new 链?

我正在阅读执行此操作的源代码,但它相当令人困惑。

var SomeObject = function() {};
SomeObject.new.Sometask;

如有任何指示,我们将不胜感激。

您示例中的 OOP 有一点偏差。它看起来像是传统函数式编程与 JavaScript 和实际 OOP 元素的混合体。在讨论 JavaScript 中的对象实例化时,为了清楚起见,我将参考 Mozilla 此处概述的语法:https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object-oriented_JS

关于您的问题,您可以在实例化一个对象后链接一个方法,就像您可以立即在新实例化的对象上检索 属性 一样。

var person1 = new Person('Bob');
console.log(person1.name);

或者实例化后立即得到属性:

console.log((new Person('Bob')).name);

同样可以用方法来完成:

var person2 = new Person('Bob', 23);
console.log(person2.getAge());

或者实例化后立即调用方法:

console.log((new Person('Bob', 23)).getAge());

回答你的问题:是的,你可以这样做。我不知道 为什么 人们可能想要这样做,但是由于 Javascript 非常灵活,所以可以做大多数事情。也许有一个有趣的用例。

您可以在 SomeObject 上创建 new 一个 getter 函数,然后当您访问 new return 一个新实例化的对象时:

var SomeObject = function() {
    this.name = "Test"
};
// defined new getter
Object.defineProperty(SomeObject, "new", {
    get: function my_new() {
        return new SomeObject()
    }
});

// add Sometask
SomeObject.prototype.Sometask = function(){
    console.log("name:", this.name)
    return this // to allow more chaining
}

SomeObject.new.Sometask();