Object.assign()源码以及分析
官⽅:Object.assign() ⽅法⽤于将所有可枚举属性的值从⼀个或多个源对象分配到⽬标对象。它将返回⽬标对象
⽤法
const target ={ a:1, b:2};
const source ={ b:4, c:5};
const returnedTarget = Object.assign(target, source);
console.log(target);
秋姑娘// expected output: Object { a: 1, b: 4, c: 5 }
console.log(returnedTarget);飞机儿童画
杨虎城之死// expected output: Object { a: 1, b: 4, c: 5 }
源码
var _extends = Object.assign ||function(target){
for(var i =1; i < arguments.length; i++){//arguments为全部的对象集合
var source = arguments[i];//单个对象
家里财神怎样摆放更能招财
//遍历⼀个对象的⾃⾝和继承来的属性,
//常常配合hasOwnProperty筛选出对象⾃⾝的属性
for(var key in source){
全国房价排行
//使⽤call⽅法,避免原型对象扩展带来的⼲扰
if(Object.prototype.hasOwnProperty.call(source, key)){///判断是否为source⾃⾝的属性。(⾮继承)说明Object.assign只能加源对象的⾃⾝的属性,不算继承的。
target[key]= source[key];
}
}
}
return target;
};
注:
// arguments是⼀个伪数组,除了length属性和索引元素之外没有任何Array属性
// 官⽅:Object的hasOwnProperty()⽅法返回⼀个布尔值,判断对象是否包含特定的⾃⾝**(⾮继承)**属性。
var bbb ={
hasOwnProperty:function(){
return fal;
},
bar:'MABAOGUO'
};
// bbb.hasOwnProperty('bar'); // 始终返回 fal
({}).hasOwnProperty.call(bbb,'bar')// true
宝宝找数字
bbb.__proto__.hasOwnProperty.call(bbb,'bar');// true
危化企业>鬼屋作文Object.prototype.hasOwnProperty.call(bbb,'bar');// true
原因:相当于借⽤别的对象的hasOwnProperty⽅法