Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript:设置对象属性_Javascript_Object_Set - Fatal编程技术网

Javascript:设置对象属性

Javascript:设置对象属性,javascript,object,set,Javascript,Object,Set,我希望能够做到这一点: 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

我希望能够做到这一点:

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'
}
期望的结果:

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中是否存在类似的方法?不,您不想这样做

向所有对象添加方法的唯一方法是扩展
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"
});
具有
extend
的实现,或者您可以使用:

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

这通常称为扩展对象。实际上,每个JavaScript库都有自己的方法来实现这一点。或者,您也可以用几行代码编写自己的代码

使用jQuery的方法,您可以这样做:

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

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

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

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

大概是这样的:

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

    return $.extend(defaults, obj1);
}

jQuery有一个非常好的扩展方法:@pagewil:\我告诉你你想做的事情是不明智的,但是你可以使用另一种方法。谢谢,这是更详细的:)我实际上在NodeJS上下文中需要它,应该在前面提到过。@pagewil
require(“pd”).extendNatives()
;)或者在简单的JS中:
var user1={name:'John',gender:'male'};用户1[“电子邮件”]=“john@gmail.com";