Object是个什么鬼

引言

老人常说,在js中,一切皆对象,那对象又是什么涅,最常用的我们都知道,对象有方法和属性。由一些键值对构成的集合,然后随便用个大括号括起来就形成了一个对象。看起来蛮简单的,但是真是这么简单么,当我们新建一个对象,为什么会‘天生’带有 hasOwnPropertytoString 这些方法呢?

追溯

这其实与JS的继承机制有关,JS中对象是通过原型继承的,实例对象都默默带着一个__proto__属性,这个属性默认指向实例对象的原型对象,当访问实例对象没有的属性或者方法时,js引擎会顺着__proto__查找原型对象是否有该属性或者方法。简单说,就是每个儿子背后都有个强大的粑粑,当儿子想买东东而自己没能力的时候,就会找粑粑‘啃老’,这就是为啥所有的对象都会有 toString这些方法,真相只有一个,他们有个‘富’粑粑或者耶耶。

原型

没错,就是Object.prototype了,为啥不是Object涅,敲黑板,Object是构造函数啊童靴们,不信可以在控制台打一下看看。那么问题又来了,Object.prototype有什么用,都有哪些方法呢。

  1. hasOwnProperty() 检查是否存在一个给定名字的自有属性
  2. valueOf() 返回一个对象的值表达
  3. toString() 返回一个对象的字符串表达

js属性特性:

  • 属性的特性其实就是值当前的属性是否可以写可以读等等。即外部对象对于属性操作的权限。

当前的js一般的属性都是有4中属性。分别是:数值属性value,可读属性writable,可枚举属性enumerable,和可配置属性configurable。但是由于对象中存在一类特别的属性存取器属性,所以对于存取器属性的值实际上是有点不同的,他有自己的特别的属性特性包括,读取(get),写入(set),可枚举和可配置。为了实现这一对象属性的描述,js中定义了一个属性描述符对象。并且可以通过Object.getOwnPropertyDescriptor()方法来获取某个对象中的特定属性的描述符。当然当前函数只能获取对象自有属性的描述,如果要获取继承属性的描述符的话,需要使用Object.getPrototypeOf();

参考

posted @ 2019-03-24 00:06  稀算客  阅读(207)  评论(0编辑  收藏  举报