2013-10-08 79 views
1

我试图创建具有三种方法walkeattalk命名human JavaScript对象,我想这样称呼它(没有方法应该打印任何值):human.talk('hello').walk('home').eat('pizza')创建JavaScript对象有3种方法抛出对象没有方法

我有这样的代码:

var human = { 
    talk : function talk(t){ 

    }, 
    walk : function walk(w){ 

    }, 
    eat : function eat(e){ 

    } 
}; 

console.log(human.talk('hello').walk('home').eat('pizza')); 

但我收到Uncaught TypeError: Cannot call method 'walk' of undefined

为什么?

+0

像这样http://jsfiddle.net/ccHGF/:P – PSL

+1

'talk'是否会返回'human'?它必须链接工作。 – Bergi

回答

6

如果你想链接功能,每个功能需要return this。您收到错误,因为功能talk正在返回undefined,而您实际上正尝试拨打undefined.walk('home')

0

你不能像这样连锁呼叫。你是否想要记录所有三个结果?

console.log(human.talk('hello'),human.walk('home'),human.eat('pizza')); 

如果你确实想有一个“流利”调用链,你的函数都需要返回this(这样就可以继续调用它的功能)。

0

其不完全清楚你正在努力实现与上述但是从我所看到的代码是什么,有两种选择:

您尝试调用所有三种功能,并具有打印的console.log A.函数的结果顺序,一个接一个,即你正在使用(。)操作来将函数调用的结果连接成一个长字符串,在这种情况下,我想提醒你,javascript中的连接运算符,不像,说php是+而不是(。)所以用这个:

console.log(human.talk('hello') + walk('home') + eat('pizza')); 

B.你实际上想调用链f或函数调用。在这种情况下,我想重新认识你。运算符检索对象的属性或方法,即语法是(对象)。(属性),始终是运算符应该是对象之前的标识符或值。因此,为了要链接调用工作,所有给出的函数应该在这种情况下返回一个对象,(好吧,也许除了最后一个),相应的返回值将是“这个”:

var human = { 
    talk : function(t){ 
     return this; 

    }, 
    walk : function(w){ 
     return this; 
    }, 
    eat : function(e){ 
     return this;//or whatever here 
    } 
};