...
JS 中基本所有的非基本类型的对象的原型最终都是 Object(可点此实验,除了 null
undefined
Symbol 和特意自定义了原型的对象,包括自定义类的实例、各种基础类型在内的所有对象最初始的原型都是 Object)。Object,另建议阅读 null-prototype objects )。
因为原型是一种链式结构,而几乎所有的对象的原型链最头上都是 Object,因此 Object 的方法几乎可以被所有对象所调用(在没有被同名属性屏蔽的情况下)
...
与值相关的属性 TODO
与 property 相关的属性
(已被弃用的)__defineGetter__ 和 __defineSetter__ 属性用于为对象定义 getter 和 setter,现已建议用 Object.defineProperty 来替代
(已被弃用的)__lookupGetter__ 和 __lookupSetter__ 属性用于获取给对象定义的属性,现已建议用 Object.getOwnPropertyDescriptor 替代
hasOwnProperty 属性函数用于判断对象是否存在某一自有属性
自有属性的含义:是属于这个对象的,而不是属于其原型链上的
与 in 不同:in 会检查所有原型链上的继承属性,而 hasOwnProperty 不会检查原型链
现在已建议使用 Object.hasOwn 来替代
propertyIsEnumerable 属性函数用于判断对应的属性是否为自有属性 + 可枚举属性
虽然函数命名上仅展示了可枚举性,但实际上只有同时为自有属性该函数才会返回 true
关于可枚举属性的含义:各种对象的属性后面会具体再写,简单说就是可以被循环到的属性,可阅读文档 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Enumerability_and_ownership_of_properties 详细了解
可利用 Object.getOwnPropertyDescriptor + 判断返回的 enumerable 属性来替代
与 prototype 相关的属性
(已经被弃用的)__proto__ 属性,用于获取或设置 prototype(上面说过了)
isPrototypeOf 属性:一个函数,用于判断调用当前函数的 this 是否存在于另一个对象的原型链中
使用方法应该为
A.prototype.isPrototypeOf(b)
,即调用isPrototypeOf
的对象应当为一个原型对象、而它的参数应该为存在原型的对象现在通常使用
instanceof
,通常A.prototype.isPrototypeOf(b)
可以被b instanceof A
替代
...
对象的 property
TODO