Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向对象添加自定义函数_Javascript_Oop - Fatal编程技术网

Javascript 向对象添加自定义函数

Javascript 向对象添加自定义函数,javascript,oop,Javascript,Oop,我想在创建对象后添加新函数。我试着写一些代码,但不正确。 // 对不起,我的描述不清楚。我想在我创建一个对象之后,我可以为这个对象添加函数来做一些事情。希望有人能理解我的英语: 函数Adda,b{ var _self=这个; var a=a; var b=b; } Add.prototype.doAdd=函数{ var rs=这个.a+这个.b; 国际财务报告准则

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

函数Adda,b{ var _self=这个; var a=a; var b=b; } Add.prototype.doAdd=函数{ var rs=这个.a+这个.b; 国际财务报告准则<10{ 这是莱斯特汉坦; }否则{ 这是十余个; } }; Add.prototype.moreThanTen=函数回调{ ifcallback{ callback.callthis; } }; Add.prototype.lessThanTen=函数回调{ ifcallback{ callback.callthis; } }; var add=新的add; add.morethanten函数{ 控制台。超过十个日志; }; add.lessthanten函数{ console.loglessThanTen };
add.doAdd 分配回调的代码不是它的工作方式。它只是执行方法,而不是神奇地分配回调。回调需要传递到doAdd方法中,或者您需要以不同的方式分配回调。

如果要向对象添加属性,请使用以下代码:

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");
});

你有几个问题。首先,使用var将声明一个局部变量,因此在该函数之外无法访问它。如果要创建成员变量,请使用此选项。相反,正如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);
    }
};

你想在代码中做什么?但它不正确并不能很好地描述问题。请务必在问题中包含代码,并编辑问题以解释什么不起作用以及为什么不起作用,即,您预期会发生什么。我编辑了代码,因此它位于它所属的帖子中。我希望在创建对象后,我可以为该对象添加函数以执行某些操作。