我想在创建对象后添加新功能。我尝试写一些代码,但不对。 // 对不起,我的描述不清楚。我想在创建一个对象后,我可以为这个对象添加函数来做某事。希望有人能理解我的英语:(
http://fiddle.jshell.net/7LnLerdt/
function Add(a,b){
var _self = this;
var a = a;
var b = b;
}
Add.prototype.doAdd = function(){
var rs = this.a+this.b;
if(rs < 10){
this.lessThanTen();
}else{
this.moreThanTen();
}
};
Add.prototype.moreThanTen = function(callback) {
if(callback){
callback.call(this);
}
};
Add.prototype.lessThanTen = function(callback) {
if(callback){
callback.call(this);
}
};
var add = new Add();
add.moreThanTen(function(){
console.log("moreThanTen");
});
add.lessThanTen(function(){
console.log("lessThanTen")
});
add.doAdd();
答案 0 :(得分:0)
您所在的代码&#34;分配&#34;回调不是它的工作原理。它只是执行方法,它不会神奇地只分配回调。回调需要传递到doAdd方法,或者您需要以不同的方式分配回调。
答案 1 :(得分:0)
如果要向对象添加属性,请改用此代码:
function Add(a,b){
this.a = a;
this.b = b;
}
如果你想添加回调,请使用:
Add.prototype.addCallbacks(less, more) {
this.less = less;
this.more = more;
};
Add.prototype.moreThanTen = function(callback) {
if(this.more){
this.more.call(this);
}
};
Add.prototype.lessThanTen = function(callback) {
if(this.less){
this.less.call(this);
}
};
然后
var add = new Add();
add.addCallbacks(function(){
console.log("lessThanTen")
}, function(){
console.log("moreThanTen");
});
答案 2 :(得分:0)
你有几个问题。首先,使用var
将声明本地变量,因此在该函数之外无法访问它。如果要创建成员变量,请改用this.
(如jcubic指出的那样)。
function Add(a, b) {
this.a = a;
this.b = b;
}
其次,您没有正确添加回调。您的代码正在立即执行回调,但(我认为)您真正想要做的是保存回调并在以后执行它。
function Add(a, b) {
this.a = a;
this.b = b;
this.moreThanTenCallbacks = [];
this.lessThanTenCallbacks = [];
}
Add.prototype.moreThanTen = function(callback) {
moreThanTenCallbacks.push(callback);
};
Add.prototype.lessThanTen = function(callback) {
lessThanTenCallbacks.push(callback);
};
Add.prototype.executeCallback = function(callbacks) {
for (var i = 0; i < callbacks.length; ++i) {
if (callback) {
callback();
}
}
};
Add.prototype.doAdd = function() {
var rs = this.a + this.b;
if (rs < 10) {
this.executeCallback(this.lessThanTenCallbacks);
} else {
// NOTE: this will execute moreThanTen callbacks even if the result equals 10!
// Are you sure that is what you want?
this.executeCallback(this.moreThanTenCallbacks);
}
};