2

オブジェクトをパラメーターとして受け取るウィジェットを使用しています。ウィジェットをカスタマイズするには、オブジェクト継承の王様が必要です。デフォルト設定はデフォルトである必要があり、オブジェクトを継承 (プロパティの追加と更新) して、以下のコードに示すように目的のオブジェクトを提供する必要があります。

defaultSettings = {

     setting1 = "setting1 value"; 
     setting2 = "setting2 value"; 

}

customSettings  = {

     setting2 = "setting2 value - custom";  //Overwrite defaultSettings 2    
     setting3 = "setting3 value";  //New Setting 

}

finalObject = {

    setting1 = "setting2 value - custom"; 
    setting2 = "setting2 value"; 
    setting3 = "setting2 value"; 
} 

これを尋ねる前にグーグルで検索しましたが、これを達成するための最も効率的な手法が何であるかわかりませんか?

4

3 に答える 3

2

通常、継承は、あなたが説明していることを行う方法ではありません。代わりに、通常行うことは、デフォルトのオブジェクトを用意することです:

var defaults = {
   setting1: "default1",
   setting2: "default2",
   setting3: "default3"
};

...そして、これらのプロパティのいずれかを持つ (または持たない) オブジェクトを関数に受け入れさせ、次のように組み合わせた結果を作成します。

function apiCall(o) {
    var options = {};
    var key;

    for (key in defaults) {
        options[key] = defaults[key];
    }
    for (key in o) {
        options[key] = o[key];
    }

    // ...then use `options` here...
}

これは非常に一般的なパターンであり、 jQuery のextendPrototype のextendなど、多くのライブラリに関数があります。

extend任意の数のオブジェクトを受け入れる汎用(各オブジェクトは前のオブジェクトよりも優先されます) は次のようになります。

function extend() {
    var rv = {},
        key,
        source,
        index;

    for (index = 0; index < arguments.length; ++index) {
        source = arguments[index];
        for (key in source) {
            rv[key] = source[key];
        }
    }

    return rv;
}

そのような場合extend、API 呼び出し関数は次のようになります。

function apiCall(options) {
    options = extend(defaults, options);

    // ...
}

でも、JavaScript の継承に興味があるなら、それを簡単にするためにというヘルパー ライブラリを作成し、JavaScript (継承を含む) について貧弱な私のブログで定期的に書いLineageます

于 2013-05-24T12:59:25.937 に答える
0

Node.js を使用している場合は、util.inherits(constructor, superConstructor). そうでない場合は、ライブラリに依存するドキュメントを次に示します。

実装は異なる場合があります (例: ディープ コピー)。そのため、製品の準備ができているとマークする前に、徹底的にテストすることをお勧めします。

于 2013-05-24T12:59:03.983 に答える
0

クラスにデフォルト値を設定できます。値を渡すと、クラスはこれらの値を想定します。

var foo = function (settings){
    this.Settings = settings || {};

    this.Settings.a = this.Settings.a  || 'Default';
    this.Settings.b = this.Settings.b  || 'Default'
    console.log(this.Settings)
}

//default
var test = new foo(); //Object {a: "default", b: "default"}

//custom
var settings = {
    a:'a', 
    b:'b'
};
var x = new foo(settings); // Object {a: "a", b: "b"}


//add new settings
x.Settings.c = 'test';

console.log(x.Settings); // Object {a: "a", b: "b", c: "test"}
于 2013-05-24T13:14:49.927 に答える