まず、オブジェクト コンストラクターがパラメーターを取得できるようにします。
function User(params) {
...
任意の数の引数を指定できるようにするために、paramsパラメーターはオブジェクト リテラルを受け入れます。
new User({name: 'name 1', id: 1});
次に、オブジェクトからオブジェクトへparamsのプロパティの割り当てを処理するジェネリック関数にオブジェクトを渡します。paramstarget
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 }