4

我试图不明显地重复问题,因为我已经看到了一些关于 Douglas Crockford 的 Javascript the Good parts book 的问题/答案

我理解大部分代码

Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};

Function.method('inherits', function (Parent) {
this.prototype = new Parent( );
return this;
});

var Mammal = function (name) {
this.name = name;
}.method('get_name', function () {
return this.name;
}).method('says', function() {
return this.saying || '';
});

var Cat = function (name) {
this.name = name;
this.saying = 'meow';
}.inherits(Mammal)

var myCat = new Cat('bagsley');
myCat.get_name();

我遇到的问题是 this.prototype[name] 为什么不写成 this.prototype.name;我知道返回它允许链接,这里的语法看起来与 jQuery 非常相似,但我仍然没有得到原型 [名称] 部分

感谢任何帮助

4

2 回答 2

3

obj.name和之间有区别obj[name]

这个...

obj.name = 123;

...将值分配给123"name"对象的)属性。

另一方面,这...

obj[ name ] = 123;

...将值分配给123名称等于name变量/参数值的那些属性。

所以:

var name = 'foo';

obj.name = 123;
obj[ name ] = 456;

// And now:
obj.name; // 123
obj.foo; // 456
于 2012-05-12T22:02:13.827 回答
2

prototype[name]允许name是包含任何字符串的变量,并且它将访问prototype由字符串命名的属性。prototype.name会寻找字面上称为“名称”的属性。

[]语法允许您:

  1. 具有可变属性名称 - 在循环使用属性时特别有用for..in
  2. 在属性名称中使用其他不允许的符号(例如obj['foo-bar'], arr[123]
  3. 与 PHP 等其他语言的关联数组更相似。
于 2012-05-12T22:01:38.990 回答