0

このコードは、オブジェクト プロパティを動的に設定できません。 console.log(key, val)ループが を正しく反復することを示しますoptions( のキーによってマージdefaultsおよびフィルタリングされますdefaults):

function Foo(options) {
   var defaults = { foo: "bar" },
       options  = _.defaults(options || {}, defaults);

    _.each(_.pick(options, _.keys(defaults)), function(val, key) {
        this[key] = val; // Not working
    });

    this.baz = 'bar'; // Works
};

var foo = new Foo();

foo.hasOwnProperty('foo'); // false
foo.hasOwnProperty('baz'); // true

Q1 : なぜ機能しないのですか? this[key]間違っていますか?

Q2 : キーセンシティブな問題、つまり pass に (通常) どのように対処すればよい{"FOO": "bar"}ですか?

機能 (重要な場合): ._defaults_.pickおよび_.keys.

4

2 に答える 2

4

コールバックのthisコンテキストがeach、含まれている関数を指していませんFoo。の 2 番目の引数としてコンテキストを指定できますeach

_.each(_.pick(options, _.keys(defaults)), function(val, key) {
    this[key] = val;
}, this);

値を反復処理する必要はまったくないことに注意してください。次のように使用できます_.extend

_.extend(this, _.pick(options, _.keys(defaults)));
于 2013-02-08T16:05:20.513 に答える
0

すべての関数には独自の「this」があるため、_.each 内の「this」は Foo と同じではありません。「this」を Foo から each に手動で渡す必要があります。これを行うには、アンダースコア関数 _.bind を使用できます。

于 2013-02-08T16:06:16.660 に答える