0

私は Ruby のバックグラウンドを持っており、JSON API エンドポイントを取得したオブジェクトと対話する Javascript ライブラリをテストしようとしています。

次の Ruby を Javascript で再作成するにはどうすればよいですか?

class ArbitraryMock
  def initialize(property_hash)
    @property_hash = property_hash
  end

  def method_missing(*args)
    @property_hash[args.first] || ''
  end
end

編集: method_missing は、メソッドが存在しないときに呼び出される動的メソッドです。このメソッドのデフォルト バージョンでは NoMethodError が発生します (Javascript は undefined を返すと思います)。上記のような方法でメソッドをオーバーライドすることにより、次のようなことが可能になります。

some_object = ArbitraryMock.new(foo: 'bar')

some_object.foo
=> 'bar'
some_object.bang
=> ''
4

1 に答える 1

0

Javascript にはmethod missingに相当するものがないため、これを行う唯一の方法はゲッターとセッターを使用することでした。

パラメータを初期化します。各プロパティにはゲッターとセッターがあります。getter は、プライベート変数の値または空の文字列を返します。セッターは、割り当てられた値でプライベート変数を設定します。

var params = {
    get name() { return this._name ? this._name : ''; },
    set name(name) { this._name = name; },
    get dog() { return this._dog ? this._dog : ''; },
    set dog(dog) { this._dog = dog; }
};

任意のモック オブジェクトをセットアップして初期化します。初期化メソッドは、ゲッターとセッターをオブジェクトに固定します。

var arbitraryMock = {
    initialise: function (params) {
        for (var k in params) {
            this[k] = params[k];
        }
    }
};

arbitraryMock.initialise(params);

name の値をテストすると、最初は空の文字列が返されます。

console.log(arbitraryMock.name); //  empty string

しかし、値を割り当てるとname

arbitraryMock.name = 'Basil Fawlty';
console.log(arbitraryMock.name); // 'Basil Fawlty'

これは、オブジェクトに追加した他のプロパティに対して機能します。

console.log(arbitraryMock.dog); //  empty string
arbitraryMock.dog = 'Terrier';
console.log(arbitraryMock.dog); // 'Terrier'

フィドル

これが少し役立つことを願っています。

于 2013-10-17T14:34:04.363 に答える