我正在尝试做一些非常简单但却无法实现的事情。
var Dummy = function() {
self = this;
setTimeout(function() {
if(self.render) {
self.render();
}
}, 10);
};
var test = new Dummy();
test.render = function() {
console.log('Make constructor call this method? ');
}
如何在没有settimeout的情况下完成这项工作?
目标:根据附加到实例的函数名称,我想按特定顺序调用它们。
例如:
var Dummy = function() {
if(function1) {
function1();
}
if(function2) {
function2();
}
};
答案 0 :(得分:2)
你的问题并不完全清楚,但我假设你有一个你希望在实例化对象后立即调用的函数。最简单的方法是将函数作为参数传递。
类似的东西:
var Dummy = function(myFunction) {
self = this;
self.render = myFunction; // if you want to be able to call it again later
self.render(); // if you want to call it now
};
var test = new Dummy(function() {
console.log('Make constructor call this method? ');
});
var anotherTest = new Dummy(function() {
console.log("this instance will have a different render function");
});
现在,当然,这可以扩展到处理传入的任意数量的函数:
var Dummy = function(func1, func2) {
// Note: you may want to check the arguments actually are functions
if (func1) {
func1();
}
if (func2) {
func2();
}
}
var test = new Dummy(function() { console.log("1"); },
function() { console.log("2"); });
或者您可以按照您希望它们执行的顺序传递一系列函数:
var Dummy = function(funcArray) {
for (var i=0; i < funcArray.length; i++) {
funcArray[i]();
}
}
var test = new Dummy([function() { console.log("1"); },
function() { console.log("2"); }]);
或者你可以使用你想要的函数(和名称)传入一个对象:
var Dummy = function(funcObject) {
if (funcObject.func1) {
funcObject.func1();
}
if (funcObject.func2) {
funcObject.func2();
}
}
var test = new Dummy({ func1 : function() { console.log("1"); },
func2: function() { console.log("2"); });
答案 1 :(得分:2)
我不确定你要做什么,但如果你要做的是在实例化object instance of Dummy
时调用多个函数(按顺序):
var Dummy = function() {
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === "function") {
arguments[i]();
}
}
}
var function1 = function() { console.log('Func 1 executed!'); }
var function2 = function() { console.log('Func 2 executed!'); }
var d = new Dummy(func1, func2, 'maybe a string also');
// log
'Func1 executed!'
'Func2 executed!'
答案 2 :(得分:0)
因为您在render()
(Dummy instance
)上添加了test
方法,而您甚至没有调用render()
方法。
我认为您需要更改为以下内容(假设您不想使用prototype
创建render()
方法):
var Dummy = function() {
this.render = function() {
console.log('Make constructor call this method called? ');
};
self = this;
setTimeout(function() {
console.log(self);
self.render();
}, 10);
};
var test = new Dummy();