是否可以使用链调用new实例化一个对象?
我正在阅读做到这一点的源代码,但是这非常令人困惑。
var SomeObject = function() {};
SomeObject.new.Sometask;
任何方向将不胜感激。
答案 0 :(得分:2)
要回答您的问题:是的,您可以这样做。我不知道为什么为什么可能要这样做,但是由于Javascript非常灵活,因此可以做大多数事情。也许有一个有趣的用例。
您可以在new
上使SomeObject
成为一种吸气功能,然后在您访问new
时返回一个新实例化的对象:
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();
答案 1 :(得分:1)
您的示例中的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());