所以我的情况就像是
function MyObject ( data )
{
// ...
this.MyMemberFunction = function ( ) { /* ... */ };
}
我希望在创建新MyMemberFunction
时调用MyObject
。所以我想要相当于
var myObjectInstance = new MyObject(allData);
myObjectInstance.MyMemberFunction();
或
function MyObject ( data )
{
// ...
this.MyMemberFunction = function ( ) { /* ... */ };
this.MyMemberFunction();
}
var myObjectInstance = new MyObject(allData);
但是我想知道是否有比其中任何一种更好,即更合适的方式?
答案 0 :(得分:2)
对象的构造函数是您应该将对象初始化为正常工作状态的位置,并且应该在其中放置应该为对象的所有新创建调用的任何代码。对象具有从构造函数调用的.init()
方法是非常常见的,该方法为对象执行公共设置代码。
因此,如果它包含应始终在所有新对象上调用的代码,则在构造函数中调用方法是正确的。
您还可以使用其他选项来定义方法。将它放在原型上而不是在构造函数中赋值它可能是有意义的。
function MyObject ( data ) {
// ...
this.myMemberFunction();
}
MyObject.prototype.myMemberFunction = function ( ) { /* ... */ };
var myObjectInstance = new MyObject(allData);
注意:Javascript中的一个常见约定是构造函数以大写字母开头,但对于常规函数或成员以小写字母开头。由于构造函数应该以不同的方式调用(使用new
),因此它会以不同方式识别它们。
注意:如果初始化方法不需要是可以从外部世界调用的公共方法,那么它不必是对象的实际公共方法。您可以将代码内联在构造函数中或私有函数中,该函数仅在对象文件的范围内可用。
答案 1 :(得分:0)
这是使用prototype
的另一种选择:
var Person = function ( data )
{
// ...
this.doSomething();
}
Person.prototype.doSomething = function ( ) { /* ... */ };
var myObjectInstance = new Person(allData);
但是,我不能说它“更好”,因为它肯定取决于你在发展什么