如何链接呼叫功能?

时间:2014-07-24 16:41:25

标签: javascript

嘿,伙计们是javascript app开发的新手

当我尝试这段代码时

function name() {
return 5;
}

function anotherone() {
return 3;
}

function horse() {
return 5;
}

当我调用像console.log(name().anotherone().horse());这样的函数时,会抛出像undefined not a function这样的错误。

是否可以在javascript中调用类似afunction().anotherfunction().anotherfunction1()的函数?

提前致谢..

5 个答案:

答案 0 :(得分:2)

当您致电name().another()时,评估结果为(5).anotherone()

anotherone()不是文字5的函数,这就是您收到错误undefined is not a function的原因。如果要链接方法,请使用返回其自身实例的类/对象,以便调用myClass.aFunction().anotherfunction(),以便调用堆栈的计算结果为(myClass).anotherfunction()

答案 1 :(得分:0)

是的。链中的最后一个函数必须返回包含您接下来调用的函数的对象,例如:

var obj = {
    foo: function(){ return obj; },
    bar: function(){ return obj; },
    baz: function(){ return 123; }
};

console.log(obj.foo().bar().baz()); // works, logs 123

答案 2 :(得分:0)

问题在于你的语法。

查看你的功能:第一个返回5,所以你基本上做5.anotherone()。点表示法用于访问对象的属性和方法。 anotherone()不是5的方法,因此您将获得undefined is not a function

此外,您没有为这些功能提供任何参数,因此您无法向其传递任何内容。

你可以那种做你正在描述的事情,但你必须对此有所不同:

function name() {
    return 5;
}

function anotherone(num) {
    return num + 3;
}

function horse(num) {
    return num + 5;
}

console.log(horse(anotherone(name())));

Demo

答案 3 :(得分:0)

详细了解OOP in javascript

var Class = function () {};

Class.prototype = {
    value: 0,
    addOne: function () {
        // do stuff
        this.value++;

        return this;
    },
    addTwo: function () {
        this.value = this.value + 2;

        return this;
    },
    getValue: function () {
        return this.value;
    }
};

var obj = new Class();
// Chaining possible when you return the object at the end of your method
console.log(obj.addOne().addTwo().addOne().getValue()); // returns 4

// Chaining is not possible when you return something else
console.log(obj.addOne().getValue().addOne()); // undefined is not a function

答案 4 :(得分:0)

安静轻松: -

function name() {
return 5;
setTimeout(anotherone,0);
}

function anotherone() {
return 3;
setTimeout(horse,0);
}

function horse() {
return 5;
}

现在你只需要调用第一个函数,它将自己调用下一个函数。