Object.assign(),合并多个对象方法

更新时间:2023-05-25 06:29:50 阅读: 评论:0

Object.assign(),合并多个对象⽅法
Object.assign()
(1). ES6 对象提供了 Object.assign()这个⽅法来实现浅复制。
june什么意思
(2).  主要的⽤途是⽤来合并多个JavaScript的对象。
(3).  Object.assign()接⼝可以接收多个参数,第⼀个参数是⽬标对象,后⾯的都是源对象,assign⽅法将多个原对象的属性和⽅法都合并到了⽬标对象上⾯,如果在这个过程中出现同名的属性(⽅法),后合并的属性(⽅法)会覆盖之前的同名属性(⽅法)。talents
(4).Object.assign拷贝的属性是有限制的,只会拷贝对象本⾝的属性(不会拷贝继承属性),也不会拷贝不可枚举的属性
⽅法⽤于将所有可枚举属性的值从⼀个或多个源对象复制到⽬标对象。它将返回⽬标对象。
⽤法:
const object1 = {
a: 1,
b: 2,
c: 3
};
const object2 = Object.assign({c: 4, d: 5}, object1);
console.log(object2);
//  {c: 3, d: 5, a: 1, b: 2}
这种 object1不会改变,还是原来的值
当改写成以下这种:
const object2 =  Object.assign(object1,{c: 4, d: 5});
console.log(object2);
/
/ {a: 1, b: 2, c: 4, d: 5}
同时这时候 object1也改变了,等于object2了
var target  = {a : 1}; //⽬标对象
var source1 = {b : 2}; //源对象1
var source2 = {c : 3}; //源对象2
var source3 = {c : 4}; //源对象3,和source2中的对象有同名属性c
Object.assign(target,source1,source2,source3);
//结果如下:
//{a:1,b:2,c:4}
语法
Object.assign(target, ...sources);
target: ⽬标对象
sources: 源对象
当有属性同名时,sources中属性的值会覆盖target的值
注意这⾥参数都是对象be true
参数:
target: ⽬标对象
sources: 源对象
返回值:
*⽬标对象
描述
如果⽬标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。
Object.assign ⽅法只会拷贝源对象⾃⾝的并且可枚举的属性到⽬标对象。该⽅法使⽤源对象的[[Get]]和⽬标对象的[[Set]],所以它会调⽤相关 getter 和 tter。因此,它分配属性,⽽不仅仅是复制或定义新的属性。如果合并源包含getter,这可能使其不适合将新属性合并到原型中。为了将属性定义(包括其可枚举性)复制到原型,应使⽤和 。
String类型和Symbol类型的属性都会被拷贝。
在出现错误的情况下,例如,如果属性不可写,会引发TypeError,如果在引发错误之前添加了任何属性,则可以更改target对象。
注意,Object.assign 不会跳过那些值为 [null] 或 [undefined]的源对象。
2013高考英语答案
注意:
const v1 = 'abc';
const v2 = true;
const v3 = 10;
const obj = Object.assign({}, v1, v2, v3);
console.log(obj); // { "0": "a", "1": "b", "2": "c" }
为什么会出现这个结果呢?⾸先,第⼀个参数位置接收到的是对象,所以不会报错,其次,由于字符串转换成对象时,会将字符串中每个字符作为⼀个属性,所以,abc三个字符作为“0”,“1”,“2”三个属性被合并了进去,但是布尔值和数值在转换对象时虽然也成功了,但是属性都是不可枚举的,所以属性没有被成功合并进去。在这⾥需要记住“assign不会合并不可枚举的属性”
Object.assign是针对Object开发的API,⼀旦在源对象的参数未知接收到了其他类型的参数,会尝试类型转换。
如果是数组类型的话,类型转换的结果是将每个数组成员的值作为属性键值,将数组成员在数组中的位置作为属性键名。多个数组组成参数⼀同传⼊的话还会造成覆盖。具体例⼦如下:
var arr=Object.assign([1, 2, 3], [4, 5])
//console.log(arr)
//[4, 5, 3]
Object.assign只能将属性值进⾏复制,如果属性值是⼀个get(取值函数)的话,那么会先求值,然后再复制。
// 源对象
const source = {
//属性是取值函数
get foo(){return 1}
truetype};
//⽬标对象
const target = {};
Object.assign(target,source);
//{foo ; 1}  此时foo的值是get函数的求值结果
Object.assign⽅法的常见⽤途  :
disturb1.为对象添加属性
class Point{
constructor(x,y){
Object.assign(this,{x,y});
校长英文}
}
上⾯的⽅法可以为对象Point类的实例对象添加属性x和属性y。
2.为对象添加⽅法
// ⽅法也是对象
// 将两个⽅法添加到类的原型对象上
// 类的实例会有这两个⽅法
Object.assign(SomeClass.prototype,{
someMethod(arg1,arg2){...},
anotherMethod(){...}
});
将⽅法添加到类的原型对象上后,类的实例能继承这两个⽅法。
3.克隆对象
//克隆对象的⽅法
function clone(origin){
i fancy you//获取origin的原型对象
let originProto = PrototypeOf(origin);
//根据原型对象,创建新的空对象,再assign
return Object.ate(originProto),origin);
}
4.为属性指定默认值
// 默认值对象秘密 英文
const DEFAULTS = {
logLevel : 0,
outputFormat : 'html'
};
// 利⽤assign同名属性会覆盖的特性,指定默认值,如果options⾥有新值的话,会覆盖掉默认值
function processContent(options){
options = Object.assign({},DEFAULTS,options);
console.log(options);
/
/...
}
处于assign浅拷贝的顾虑,DEFAULTS对象和options对象此时的值最好都是简单类型的值,否则函数会失效。
const DEFAULTS = {
url: {
host: '',
port: 7070
},
};
processContent({ url: {port: 8000} })horpower
// {
//  url: {port: 8000}
// }
上⾯的代码,由于url是对象类型,所以默认值的url被覆盖掉了,但是内部缺少了host属性,形成了⼀个bug。

本文发布于:2023-05-25 06:29:50,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/121771.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:属性   对象   合并   不会   数组   覆盖   参数   拷贝
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图