繁体   English   中英

Javascript:设置对象属性

[英]Javascript: setting object properties

我希望能够这样做:

var user1 = {
  name: 'John',
  gender: 'male'
}


var user2 = {
  name: 'James',
  gender: 'male',
  email: 'james@gmail.com'
}

user1.someSetMethod({email: 'john@gmail.com'});
user2.someSetMethod({name: 'Jenny', gender: 'female'});

期望的结果:

var user1 = {
  name: 'John',
  gender: 'male',
  email: 'john@gmail.com'
}


var user2 = {
  name: 'Jenny',
  gender: 'female',
  email: 'james@gmail.com'
}

我想要一个方法,根据传递给函数的内容设置属性。 该属性是否存在我希望它被创建,如果属性,我希望它被覆盖。

Javascript中是否存在这样的方法?

这通常称为扩展您的对象。 事实上,每个JavaScript库都有自己的方法来执行此操作。 或者你可以用几行代码编写自己的代码。

使用jQuery的方法,你会这样做:

var user1 = {
  name: 'John',
  gender: 'male'
};

$.extend(user1, {
  email: 'john@gmail.com'
});

user1.email === 'john@gmail.com'; //true

不,你不想这样做。

向所有对象添加方法的唯一方法是扩展Object.prototype

这样做(在IE8等ES3浏览器中)会导致向枚举添加属性。

例如:

Object.prototype.extend = function (o) {
  // clone properties of o into this
};

var someObj = {};
for (var key in someObj) {
  console.log(key); // "extend"
}

您可以做的最好的事情是使用Object.extend

Object.extend(user2, {
  name: "Jenny",
  gender: "female"
});

pd有一个extend的实现,你可以使用:

Object.extend = function (target, source) {
  for (var key in source) {
    target[key] = source[key];
  }
};

如果您愿意使用jquery,可以使用它的extend方法,以及一些默认值,以确保正确设置所需的所有属性。

像这样的东西:

function whatever(obj1) {
    var defaults = {
        name: 'Foo Bar',
        email: 'email@example.com',
        gender: 'male'
    };

    return $.extend(defaults, obj1);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM