4

DouglasCrockfordのJavascripttheGoodパーツブックに関するいくつかの質問/回答を見たので、明らかに質問を複製しないようにしています。

私はこのコードのほとんどを理解しています

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と非常によく似ていますが、prototype[name]の部分はまだ取得できません。

どんな助けでも感謝されます

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 に答える