全局对象
浏览器是 JavaScript 的宿主环境之一;浏览器特有的全局对象(global)是
window对象。全局对象的属性(或方法)分为公共属性和私有属性;公共属性是指 ECMAScript 规定的属性,而私有属性是不同的宿主环境特有的属性,例如浏览器中的全局对象是
window对象,它的私有属性常见的例如:document对象、history对象、alert()、prompt()、confirm()等等。
基本数据类型与对象的区别
基本数据类型没有且不能具备属性和方法,而复杂数据类型(对象)可以具备属性和方法。
使用
new运算符可以创建一个指定对象的实例,例如var num = new Number(1)。当我们平时在对存有基本数据类型的变量使用
toSring()等方法时,由于数据没有这些方法,所以编译器会隐性地临时将基本数据类型转换为对象,然后再调用其指定的方法,得出结果并返回,之后临时对象会被销毁。当给一个基本数据类型添加属性时,编译器不会报错,它会像前面一样将基本数据类型转换为对象,再给这个临时对象添加属性,之后这个临时对象被销毁,也就访问不到添加给基本数据类型的属性了。
公共属性
每个对象都有
__proto__这个隐藏属性,它内部保存着对象的公共属性,其实就是从父对象继承来的属性;它引用的是父对象的prototype属性,所有对象不管继承了多少层,最终都会有一条“链”引到 Object 对象的prototype,这就是原型链。从上一条可以知道,在 JavaScript 中,所有的对象,包括内置对象,都是 Object 对象的实例。
继承:
实例.__proto__ === 父函数.protorype;函数.prototype.__proto__ === Object.prototype。__proto__是用来引用父函数的prototype属性的,类似于上线下线的关系,而__proto__就是下线。
函数的原型链
Function 对象的 __proto__ 属性引用的是 Function 自身的 prototype,这是内置对象中的特殊情况;而 Object 对象的 __proto__ 属性引用的也是 Function 对象的 prototype,这是因为 Object 对象也是由函数构造的。