【发布时间】:2015-08-28 10:55:42
【问题描述】:
以下示例来自: http://www.phpied.com/3-ways-to-define-a-javascript-class/
var apple = {
type: "macintosh",
color: "red",
getInfo: function () {
return this.color + ' ' + this.type + ' apple';
}
};
现在我将 getInfo() 方法移到我的对象声明的顶部。
var apple = {
getInfo: function () {
return this.color + ' ' + this.type + ' apple';
},
type: "macintosh",
color: "red",
};
apple.getInfo();
red macintosh apple
我预计 javascript 解析器/编译器会失败,因为 this.color 和 this.type 尚未定义。这在内部是如何工作的?
(这个问题最初是这里的 ExtJS 框架问题:ExtJS: settings properties via a function on the Prototype: is it a safe pattern?,但我意识到这是一个更一般的 javascript 问题,因此是这个新问题)
【问题讨论】:
-
一旦你调用
apple.getInfo();,整个苹果对象就已经被定义了。 -
好问题,问得好。
-
即使您向此函数添加了永远不会定义的属性,解析器也不会失败。这与 JavaScript 是 [en.wikipedia.org/wiki/Duck_typing](Duck Typed) 的事实有关。
-
正如@hege_hegedus所说,第8行的
}之后应该有一个分号。
标签: javascript prototype