向对象添加自定义函数

时间:2015-05-16 13:12:26

标签: javascript oop

我想在创建对象后添加新功能。我尝试写一些代码,但不对。 // 对不起,我的描述不清楚。我想在创建一个对象后,我可以为这个对象添加函数来做某事。希望有人能理解我的英语:(

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();

3 个答案:

答案 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);
    }
};