从JavaScript中的另一个实例实例化一个类?

时间:2015-11-30 23:42:12

标签: javascript

说我有以下代码 - 而“我”是指它不是我的代码,我无法删除new操作。我在实例化之后才收到foo的实例。

var foo = new function() {
    this.bar = 'baz';
}

是否有可能获得原始功能并有效地执行另一个new?如果是这样,是否存在不是一个干净的克隆的情况?

var secondFoo = ...foo...
secondFoo.bar = 'qux';

foo.bar       // 'bad'
secondFoo.bar // 'qux'

2 个答案:

答案 0 :(得分:5)

你可以,对象在构造函数属性中公开它们的构造函数:

a = new function(){ this.foo = Math.random()}
>> Object {foo: 0.11541059240698814}

a.constructor
>> function(){ this.foo = Math.random()}

b = new a.constructor
>> Object {foo: 0.867641115328297}

但最有可能的是,你不会想要。

构造函数是用于创建新实例的蓝图。通过调用构造函数本身从实例化对象中提取它并不是惯用的。

答案 1 :(得分:0)

删除new运算符。

var foo = function() {
    this.bar = 'baz';
}

您现在可以从构造函数foo实例化新对象。

var instance1 = new foo();
var instance2 = new foo();

instance1.bar = 'test';

console.log(instance1.bar); // 'test'
console.log(instance2.bar); // 'baz'