まず、オブジェクト コンストラクターがパラメーターを取得できるようにします。
function User(params) {
...
任意の数の引数を指定できるようにするために、params
パラメーターはオブジェクト リテラルを受け入れます。
new User({name: 'name 1', id: 1});
次に、オブジェクトからオブジェクトへparams
のプロパティの割り当てを処理するジェネリック関数にオブジェクトを渡します。params
target
function setObjectProperties(params, target) {
}
関数は、setObjectProperties
データが正しく渡されたことを確認する必要があります。params
との両方target
が定義されているかどうかをチェックします。
function setObjectProperties(params, target) {
if (params !== undefined && target !== undefined) {
}
}
作業するものがあると確信したら、パラメーターを反復処理してオブジェクトのプロパティに割り当てます。
function setObjectProperties(params, target) {
if (params !== undefined && target !== undefined) {
$.each(params, function (i, property) {
this[i] = property;
}, target);
}
}
$.each
プロトタイプなどのすべてのオブジェクト プロパティを反復する副作用なしに、オブジェクト プロパティを反復するjQuery の関数を使用します。これは機能しますthis
が、関数のコールバック クロージャ内で再定義される副作用に対処する必要があることを意味し$.each
ます。元のオブジェクトが何であったかはわかりません。
ただし、jQuery の$.proxy
関数は、使用したいものを指定しながら関数を呼び出せるように設計されていますthis
。
function setObjectProperties(params, target) {
if (params !== undefined && target !== undefined) {
$.each(params, $.proxy(function (key, value) {
this[key] = value;
}, target));
}
}
ここでは、以下に示すように、オブジェクト コンストラクター内this
で設定されるターゲット パラメーターの値に設定するよう jQuery に指示します。this
function User(params) {
this.name = null;
this.email = null;
this.password = null;
setObjectProperties(params, this);
}
1 つの問題がまだ残っています。渡された値を割り当てることができるかどうかを確認するために、オブジェクトで宣言されたプロパティをチェックする必要があります。
function setObjectProperties(params, target) {
if (params !== undefined && target !== undefined) {
$.each(params, $.proxy(function (key, value) {
if (this.hasOwnProperty(key)) {
this[key] = value;
}
}, target));
}
}
完全で最終的なコードは次のとおりです。
function setObjectProperties(params, target) {
if (params !== undefined && target !== undefined) {
$.each(params, $.proxy(function (key, value) {
if (this.hasOwnProperty(key)) {
this[key] = value;
}
}, target));
}
}
function User(params) {
this.name = null;
this.email = null;
this.password = null;
setObjectProperties(params, this);
}
user1 = new User();
// User { name: null, email: null, password: null }
user2 = new User({ name: 'First Last' });
// User { name: "First Last", email: null, password: null }
user3 = new User({ name: 'First Last', age: '400' });
// User { name: "First Last", email: null, password: null }