假设有一个类似的结构:
var Foo = {
someVar : 13,
someMessage : function () {
return "Hello";
}
};
我想在Foo之外添加一个构造来初始化someVar,以便可以采取以下行动:
var foo = new Foo (someVar);
我知道所谓的构造函数调用模式(我实际上并不是在寻找,但我也在这里提出一个问题):
var Foo = function (someVar) {
this.someVar = someVar;
};
Foo.prototype.getSomeVar = function () {
return this.someVar;
};
var foo = new Foo ("some content");
console.log (foo.getSomeVar());
如何在Foo之外的Foo中添加属性(someSecondVar)?
答案 0 :(得分:1)
附加属性很简单,就像将函数附加到构造一样:
Foo.prototype.someSecondVar = 0;
Foo.prototype.someThirdVar = "blah";
答案 1 :(得分:0)
不幸的是,你无法在JavaScript中实例化对象文字(与其他编程语言的比较不起作用)。这可能是一个好主意,你可以节省一些文书工作。
"构造函数调用模式"尝试正确的方向,你可以这样简单地添加一个属性:
Foo.prototype.someSecondVar = "what ever";
编辑:你不能实例化一个对象文字,但你可以创建一个新对象并选择该对象,该对象应该是它的原型(来自Douglas Crockford):
请研究以下示例:
var Person = {
"name" : "Max",
"age" : 30,
"children" : ["Susi", "Ben"]
};
Object.create = function (obj) {
var F = function () {};
F.prototype = obj;
return new F();
};
var Person2 = Object.create(Person);
Person2.name = "John";
Person2.age = 40;
Person2.children = ["Sara"];
Person.city = "New York";
console.log(Person2);
输出显示了两件重要的事情:
答案 2 :(得分:0)
您可以使用对象的.prototype
来完成您想要做的事情。请记住,改变原型通常在计算上是昂贵的,并且它还会改变所有对象,这些对象是您正在改变的原型对象的实例,可能是您想要的也可能不是。
你可以像Husman在答案中提到的那样添加一个属性。
如果你真的需要实例化它并且不能只使用自定义函数放置一个值,请查看getter和setter:MDN
通过使用getter / setter,您可以为需要属性值的任何情况添加一些条件,从而以某种方式模拟构造函数。
总的来说,我建议重新考虑你的代码结构。如果您想要做的事情非常复杂,并且如果您重新考虑您的代码通常没有必要,那么这些方法通常只能是合理的。