First post a MDN address , and search for the method name implemented by js when searching
1. Get object prototype [[GetPrototypeOf]]
// js实现: GetPrototypeOf
let obj = {}
let proto = Object.getPrototypeOf(obj)
proto === obj.__proto__ === Object.prototype // true
2. Set the object prototype [[ 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. Get the object's own property [[GetOwnProperty]]
// js实现:
// 1. getOwnPropertyDescriptor 获取对象下某一个属性的描述符
// 2. getOwnPropertyDescriptors 获取对象下所有属性的描述符
// 3. getOwnPropertyNames 获取对象下所有属性名(不包括Symbol)
// 4. getOwnPropertySymbols 获取对象下所有Symbol属性名
// 描述符为 configurable enumerable writable value
4. Object extension [[PreventExtensions]]
// js实现: preventExtensions
let obj = { a: 1 }
Object.preventExtensions(obj 不可新增属性,不可删除,可读)
// obj 变的不可新增属性,可删除属性,可读,可改
5. Get the scalability of the object [[IsExtensible]]
// js实现: isExtensible
let obj = {}
let extensible = Object.isExtensible(obj) // true
// 使对象变的不可扩展的方法
1. freeze
2. seal
3. preventExtensions
6. Intercept object operations [[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. Determine whether the object has a certain own property [[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. Function call
// js实现: 执行函数声明和执行函数表达式
function fn() {} fn() // 执行函数声明
var obj = {
fn = function() {}
}
obj.fn() // 执行函数表达式
14. Instantiate Objects
// js实现: new 关键字
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。