原型与原型链

一个公式:
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


    原型与原型链_第1张图片
    公用属性.png
原型与原型链_第2张图片
各数据类型的原型关系图解.png

当 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

由此便可看出原型链所谓何物

你可能感兴趣的:(原型与原型链)