"函数x.y()"之间的区别是什么?和" x.y = function()"?

时间:2015-04-07 03:38:26

标签: javascript

这两段代码之间的唯一区别在于两个块引用中的第1行。

为什么这两段代码表现不同?

function cat.meow() {
    console.log("Meow");
};

cat.meow = function () {
    console.log("Meow");
};

2 个答案:

答案 0 :(得分:6)

第一个是无效的JavaScript,第二个是更好的主意,下面有更多细节......

为什么?

变量/函数名称只能包含字母,下划线,$,数字(如果它们不是第一个字符)以及其他一些ACII和unicode字符(选中{{3}根据{{​​3}}和here的建议,或here}。它与var cat.meow;相同,它是无效的JavaScript并会抛出错误。更具体地说

  

SyntaxError:意外的标记'。'。

编译器期望括号或空格,但它会看到一个句点而不是假设它是一个对象。这也发生在对象的括号语法中:(这意味着你无法为第一种方式定义对象'item'的函数

说明

当你这样做时: {em}将 foo 的值设置为该函数。foo = function () {}当您将其作为函数function foo () {}执行时,它会'创建' foo

所以...

第二个是指meow中的cat。因此,它将meow中的cat设置为有效的函数。这相当于:

var cat = {
    meow: function () {
        console.log("Meow!");
    }
};

显然cat没有定义,这仍然会抛出错误。如果你真的真的想让你的函数被称为cat.meow (我强烈建议反对它),你会做以下事情

window['cat.meow'] = function () {
    console.log("Meow");
};

除非你有一个不同的对象并且极其不好的做法,否则这会使全局范围变得混乱;因此,如果您使用它,请秘密进行,否则几乎每个程序员都会抨击您的编码实践。

答案 1 :(得分:3)

你至少尝试过吗?第一个不是有效的JavaScript。它应该产生

  

Uncaught SyntaxError:意外的令牌。

第二个是有效的。在这种情况下,cat是一个对象,您可以为其创建meow方法。

该错误表明.不是有效的标识符。在javascript和大多数语言中,与正则表达式\w+匹配的任何内容(包括字母数字字符+下划线)都是有效的标识符。

大多数语言(包括javascript)中,还必须让标识符以字母或下划线开头。但是,在javascript中,$也是有效的标识符。