验证中...
私信发送成功
语言: JavaScript
分类: JavaScript 工具
最后更新于 2017-10-18 11:43
Object.js
原始数据 复制代码
Object instanceof Function; // true
Function instanceof Object; // true
/*判断左边的原型链__proto__是否在右边的prototype上*/
/**
*获取任意变量的[[Class]]属性,ES6中以internal slot取代[[Class]]属性
* 'String' 'Boolean' 'Function' 'Object' 'Number' 'Array' 'Undefined' 'Null' 'Math' 'RegExp'
* 'Window' 'Navigator'
*/
function getClass (a) {
const str = Object.prototype.toString.call(a);
return /^\[object (.*)\]$/.exec(str)[1];
}
/*改变Object.prototype.toString.call的结果*/
Object.defineProperty(obj, Symbol.toStringTag, {
get: function() {
return 'new Class';
}
});
// Object.defineProperty中 set()、get()和value、writable互斥
/* prototype表示原型,property表示属性, __proto__用于读取对象原型 */
/*
total 23
[
'length', 'name', 'prototype',
'create', 'assign', 创建新对象
'getOwnPropertyNames', 不论是否可枚举,都会显示出来
'getOwnPropertyDescriptors', ES8新增特性
'getOwnPropertyDescriptor',
'getOwnPropertySymbols',
'is', ES6新增
'preventExtensions', 组织向一个对象添加更多属性
'isExtensible',
'seal', 密封一个对象,止咳变更现有属性的值,不可删除和配置
'isSealed',
'freeze', 冻结一个对象,只可枚举
'isFrozen',
'defineProperty', 'defineProperties',
'getPrototypeOf', 'setPrototypeOf', 读取或设置对象实例的原型
'keys', 'entries', 'values' ES8新增特性
]
*/
Object.getOwnPropertyNames(Object);
/*
total 12
[
'constructor',
'__defineGetter__',
'__defineSetter__',
'hasOwnProperty',
'__lookupGetter__',
'__lookupSetter__',
'isPrototypeOf',
'propertyIsEnumerable',
'toString', 描述目标对象的字符串
'toLocalString',
'valueOf',
'__proto__',
]
*/
Object.getOwnPropertyNames(Object.prototype);
// value默认undefined, writable、configurable、enumerable默认false,通过对象字面量添加的属性默认都是true,即可被Object.keys循环出来
// 获取对象属性描述, {[name]: {writable: [Boolean], enumerable: [Boolean], configurable: [Boolean], value: [Function]}}
Object.getOwnPropertyDescriptors(Object);
Object.getOwnPropertyDescriptors(Object.prototype);
Object.getOwnPropertyDescriptor(Object.prototype, 'toString');
//setPrototypeOf 设置对象原型
// ES6
var obj = {
method: function(){}
}
obj.__proto__ = someOtherObj; // __proto__是非标准属性,不建议使用,使用setPrototypeOf替代
// ES5
var obj = Object.create(someOtherObj);
obj.method = function(){}
Object.getOwnPropertySymbols({a:1, [Symbol('b')]: 2}); // [Symbol(b)]
// 对象的===是如何比较的?
// https://github.com/sindresorhus/object-assign
// Object.assign(target, ...source)只复制自身属性,不可枚举的属性不复制,改变原target对象,所以建议target使用{}
Object.assign({a: 1}, {[Symbol('b')]: 2}); // {a: 1, Symbol(b): 2}
Object.assign([1,2,3], [4,5]); // [4,5,3]
// Object.keys 只显示可枚举的属性

评论列表( 0 )

你可以在登录后,对此项目发表评论

4_float_left_people 4_float_left_close