前言: 在使用babel将ES6转换为ES5后,获取了Object.assign方法的ES5版本。基于此版本的代码进行如下的扩展学习。
rowData=Object.assign(rowData,obj);
//ES5版本代码如下:
var _extends = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];
//遍历一个对象的自身和继承来的属性,
//常常配合hasOwnProperty筛选出对象自身的属性
for (var key in source) {
//使用call方法,避免原型对象扩展带来的干扰
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}
return target;
};
rowData = _extends(rowData, obj);
1.Arguments
对象
arguments
是一个对应于传递给函数的参数的类数组对象。
描述:
arguments
对象是所有(非箭头)函数中都可用的局部变量。你可以使用arguments
对象在函数中引用函数的参数。此对象包含传递给函数的每个参数的条目,第一个条目的索引从0开始。
arguments
对象不是一个Array
。它类似于Array
,但除了length属性和索引元素之外没有任何Array
属性。例如,它没有pop
方法。
对arguments
使用typeof
返回object
console.log(typeof arguments); // 'object'
Array.prototype.slice.call(arguments)
的作用:相当于Array.from(arguments)
。Array.prototype.slice
是一个方法,将它call(arguments)
之后,Array.prototype.slice
中的this
就指向了arguments
对象了。
属性:
arguments.callee
指向当前执行的函数。
arguments.caller
指向调用当前函数的函数。
arguments.length
指向传递给当前函数的参数数量。
arguments[@@iterator]
返回一个新的Array迭代器对象,该对象包含参数中每个索引的值。
注意: 现在在严格模式下,arguments对象已与过往不同。arguments[@@iterator]不再与函数的实际形参之间共享,同时caller属性也被移除。
2.prototype
属性
prototype
属性使您有能力向对象添加属性和方法。
语法:
object.prototype.name=value
其他:
如需了解请前往 原型链浅析
3.hasOwnProperty
方法
Object的hasOwnProperty()
方法返回一个布尔值,判断对象是否包含特定的自身 (非继承) 属性。
注意: JavaScript
并没有保护hasOwnProperty
属性名,因此,可能存在一个包含此属性名的对象,即:
var foo = {
hasOwnProperty: function() {
return false;
},
bar: 'Here be dragons'
};
foo.hasOwnProperty('bar'); // 始终返回 false
因此,有必要使用一个可扩展的hasOwnProperty
方法来获取正确的结果,正确的写法如下:
({}).hasOwnProperty.call(foo, 'bar');
// 或者
Object.prototype.hasOwnProperty.call(source, key);