Function.prototype.method什么是原型[name]

时间:2012-05-12 21:50:35

标签: javascript oop prototype

我试图不重复问题,因为我已经看到有关道格拉斯克罗克福德的Javascript好书的一些问题/答案

我理解这段代码的大部分内容

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但我仍然没有得到原型[name] part

任何帮助都是适用的 感谢

2 个答案:

答案 0 :(得分:3)

obj.nameobj[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

答案 1 :(得分:2)

prototype[name]允许name成为包含任何字符串的变量,它将访问字符串命名的prototype属性。 prototype.name会查找名为“name”的属性。

[]语法允许您:

  1. 拥有可变属性名称 - 在使用for..in
  2. 循环浏览属性时尤其有用
  3. 在不允许的属性名称中使用符号(例如obj['foo-bar']arr[123]
  4. 与PHP等其他语言的关联数组更为相似。