嘿,伙计们是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()
的函数?
提前致谢..
答案 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())));
答案 3 :(得分:0)
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;
}
现在你只需要调用第一个函数,它将自己调用下一个函数。