js内置对象

在JavaScript中,一切都是对象或者可作为对象处理。


JavaScript内置对象:

    1,本地对象(通过new实例化的):Object、Array、Date、RegExp、Function、Boolean、Number、String等

     2,内置对象(自带,无需实例化):Global、Math、JSON

     3,宿主对象(环境提供的):Window、Document

JavaScript你日志错误处理的结构函数(与throw连用):

     1,Error()

     2,SynteaxError()

     3,TypeError()等

下面是对象所带来的一些思考:

通过字面量创建的对象在调用属性和方法时,会被对象包装期零食包装成一个对象,所以表现上是具有了对象一样的属性

上图带来了一个问题,以字面量形式构建对象和new形式构建对象的优劣是什么?表现在什么地方?具体的内部调用又有何区别?

JavaScript中的对象其实就键值对组成的散列表,即哈希表(简单理解就是通过了某种算法【散列函数*核心】将要检索的项和用于检索的索引关联起来,生成的一种便于搜索的数据结构),当然JavaScript中的散列表不存在所谓的散列冲突。对象的属性是随时可变的,我们不管定义的是字面量是内置对象还是仅仅一个“{ }”再添加各种属性,我们都建立了一系列的键值对。注意:就算我们创建了一个“{ }”对象,其实都会从Object.prototype继承属性,我们通常说的空,只是说没有自身的属性。

当我们使用Object()构造函数来创建对象的时候,解析器可能存在“从当前的作用域顺着作用域链直到Object()构造函数为止做查询”(考虑到你已经创建同名的构造函数),而字面量形式不需要做“作用域解析”的。new Object()/new Function()这样的操作都会去考虑这一点。

作用域链基本结构:

当前环境变量对象 >> 外部环境变量对象 >> ...... >> 全局环境变量对象


SwapName的作用域链:tempGirl>>anotherGirl>>gilr。而ChangeName的作用域链:anotherGirl>>girl。函数运行环境会向上搜索作用域链,请结合继承和闭包理解。

字面量形式优点1:


1,写法上字面量形式简易很多,想表达的属性也很清楚

字面量形式优点2(反证):

   

2,我们创建一个字符串类型的对象,它却自带了超级多的属性,且如果我们传入的其他内置对象呢?这个过程的判断是不是又将模糊不清。如果使用字面量形式,我们可以构建自己的构造函数,自己初始化自身或者链上的属性

字面量形式优点3:


3,构造函数只要返回类型是对象,并不一定是要遵循所谓的“构造函数执行时返回this指向的对象”,这里就返回了我们在构造函数中定义的新that。【实例化过程为1,先继承原型(非真正空的对象)2,创建构建自身的属性,即函数本身return,默认为return this】

new形式创建对象时防止缺失new关键字



如果我们,没有在构造函数内自定义返回对象,当我们像图中这样调用的时候,就可能顺着作用域链去查找全局的name属性了,这是我们不想看到的。

解决方法:

1,使用严格模式

2,在ECMAScript5中,这里的this不再指向全局对象哟,也可以使用上述的return that的办法,当然带来的问题是继承的全部丢失

3,先判断this是否是构造函数的实例,不是就直接return一个新的自身对象



上述解决方法2代码实例


最后,希望能寻得信仰!各位道友有错或者其他代码情况或者不懂得一定要说出来,大家一起进步啦!(写的有错的地方一定要和我说!万分感谢!)

你可能感兴趣的:(js内置对象)