我有一个View
类,它有一个构造函数方法initialize
我认为这是一个构造函数方法,如果错误则纠正我。
var View = function(obj) {
this.initalize = obj.initalize;
};
我希望实现的是在实例化Class时调用的东西。
我如何传递这样的对象?
var chatView = new View({
initialize: function() {
alert('Yay for initialization');
}
});
因此,当我实例化View
时,我可以将一个对象传递给构造函数,并且在一个键initialize
中,该值是一个函数,并且在实例化时专门调用此键。
答案 0 :(得分:2)
如果我做对了,有一种简单的方法可以达到你想要的效果:
var View = function(obj) {
obj.initialize();
}
这样,只要实例化View类,就会调用initialize函数。
请注意,如果你想做真正的"初始化代码"在要使用的初始化函数中,您可以使用call(或apply):
var View = function(obj) {
if (typeof obj.initialize === 'function') {
obj.initialize.call(this);
}
}
var chatView = new View({
initialize: function() {
this.property = 'property';
}
});
console.log(chatView.property); // outputs property
答案 1 :(得分:0)
Javascript没有构造函数,请记住javascript是基于原型的。这是"构造函数"的一个例子。你可以创建
function Example (firstname, lastname) {
this.firstname = firstname;
this.lastname = lastname;
}
Example.prototype.getFullname = function () {
return this.firstname + ' ' + this.lastname;
}
如果要创建构造函数,必须在实例化函数后调用它。
但这是一个更好的结构,你可以使用。我建议只在你需要构造函数和私有函数时。否则,使用带有原型声明的方法的简单结构,可以获得更好的性能。
var MyObject = (function () {
// Constructor
function MyObject (foo) {
this._foo = foo;
}
function privateFun (prefix) {
return prefix + this._foo;
}
MyObject.prototype.publicFun = function () {
return privateFun.call(this, '>>');
}
return MyObject;
})();
var myObject = new MyObject('bar');
使用此代码,您有一个构造函数,但它是一个"私有"函数,所以你不能在实例化对象后覆盖它。
这里我有一个链接,我创建测试不同的结构: https://plnkr.co/edit/qzgWVZlnIFnWl0MoUe5n?p=preview
结果:
测试1:~15k(带私人功能) - 仅在您需要/需要私人功能时推荐
测试2:~38k(带私人功能) - 不推荐,它返回一个非常糟糕的物体。
测试3:~8k(没有私有功能) - 推荐,它具有最佳性能,但你不能创建一个私有函数,这意味着,任何人都可以调用任何函数:S