先贴一个MDN地址,搜的时候搜js实现的方法名
1. 获取对象原型 [ [ GetPrototypeOf ] ]
// js实现: GetPrototypeOf
let obj = {}
let proto = Object.getPrototypeOf(obj)
proto === obj.__proto__ === Object.prototype // true
2. 设置对象原型 [ [ SetPrototypeOf ] ]
// js实现: SetPrototypeOf
let obj = {}
Object.setPrototypeOf(obj, { a: 1, b: 2 }) // 函数式
obj.__proto__ = { a: 1, b: 2 } // 赋值式
Object.prototype = { a: 1, b: 2 } // 赋值式
// 上面效果一样
3. 获取对象自有属性 [ [ GetOwnProperty ] ]
// js实现:
// 1. getOwnPropertyDescriptor 获取对象下某一个属性的描述符
// 2. getOwnPropertyDescriptors 获取对象下所有属性的描述符
// 3. getOwnPropertyNames 获取对象下所有属性名(不包括Symbol)
// 4. getOwnPropertySymbols 获取对象下所有Symbol属性名
// 描述符为 configurable enumerable writable value
4. 禁止对象扩展 [ [ PreventExtensions ] ]
// js实现: preventExtensions
let obj = { a: 1 }
Object.preventExtensions(obj 不可新增属性,不可删除,可读)
// obj 变的不可新增属性,可删除属性,可读,可改
5. 获取对象的可扩展性 [ [ IsExtensible ] ]
// js实现: isExtensible
let obj = {}
let extensible = Object.isExtensible(obj) // true
// 使对象变的不可扩展的方法
1. freeze
2. seal
3. preventExtensions
6. 拦截对象操作 [ [ DefineOwnProperty ] ]
// js实现: defineProperty 单个属性, defineProperties 多个属性
let obj = { a: 1 }
Object.defineProperty(obj, 'a', {
value: 1,
writable: true,
configurable: true,
enumerable: true,
// 前面是描述符
// value, writable可同时出现,get, set也可同时出现
// 但当 value 和 writable 出现任意一个时,不可以配置 get, set,反之亦然
get() {}
set() {}
})
7. 判断对象是否有某个自有属性 [ [ HasProperty ] ]
// js实现: hasOwnProperty
var obj = { a: 1 }
Object.setPrototypeOf(obj, { b: 2 })
obj.hasOwnProperty('a') // true
obj.hasOwnProperty('b') // false
8. [ [ GET ] ]
// js实现: 关键字 in, obj.a 这种写法中的 . 等,都是GET的实现
9. [ [ SET ] ]
// js实现: obj.a = 1, obj['a'] = 1 这种写法都是SET的实现
10. [ [ Delete ] ]
// js实现: 关键字 delete
11. [ [ Enumerate ] ]
// js实现: 关键字组合 for in
12. [ [ OwnPropertyKeys ] ]
// js实现: keys
var obj = { a: 1, b: 2 }
Object.setPrototypeOf(obj, { c: 3 })
Object.keys(obj) // ['a', 'b']
13. 函数调用
// js实现: 执行函数声明和执行函数表达式
function fn() {} fn() // 执行函数声明
var obj = {
fn = function() {}
}
obj.fn() // 执行函数表达式
14. 实例化对象
// js实现: new 关键字
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。