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();
是否可以实例化一个对象并对其调用 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();