一个公式:
var 对象 = new 函数()
对象 .__proto__ === 函数 .prototype
例如:
var obj = new Object ()
则 obj.__proto__===Object.prototype
全局对象window
浏览器把 window 作为全局对象,但ECMAScript规定 global 为全局对象。 window作为全局对象,有很多的属性或许说有很多的全局变量,这些全局变量可以分为两种:(详细内容上 MDN)
- ECMAScript规定必须有的:global.parseInt 、global.parseFloat、global.Number、global.String、global.Boolean、global.Object ...
- 浏览器所私有的:window.alert 、 window.prompt 、window.comfirm 、window.console.log、window.document、window.document.creatElement、document.getElementById ...
全局函数
- Number()
var n = new Number(1) 创建一个 Number 对象 - String()
var s = new String('hello') 创建一个 String 对象 - Boolean()
var b = new Boolean(true]) 创建一个 Boolean 对象 - Object ()
var o = new Object()
公用属性(原型)
原型:每一个JavaScript对象(null除外)在创建的时候就会与之关联另一个对象,这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。
- toString
-
valueOf
当 var s = new string ('1')后,就表明创建了一个hash表,并把hash 指向 string.prototype,然后就可以调用所有的属性了。
string.prototype 是String 的公用属性的引用 (防止被回收)
S.__proto__ 是 String 的公用属性的引用 (使用)
原型链
根据原型关系图解可以得出:
- 每个对象都拥有 __proto__属性
- Number 公用属性===number.prototype 即函数都具有prototype属性
var n = new Number()
// n.__proto__===Number.prototype //true
// Number.prototype.__proto__===Object.prototype //true
//Number.prototype.__proto__.__proto__===null //true
由此便可看出原型链所谓何物