原型和原型链

JS里的内置对象

全局对象

ECMAScript 规定全局对象叫做 global,浏览器默认全局对象是window
ECMAScript规定的函数,在任何地方可以使用的函数

global.parseInt
global.parseFloat
global.Number
global.String
global.Boolean
global.Object

浏览器私有的函数

window.alert
window.prompt
window.comfirm
window.console.log
window.console.dir
window.document
window.document.createElement
window.document.getElementById

简单类型与对象

var n1 = 1  //n1是简单的数据类型,值是1
n1.toString()  //'1'
var n2 = new Number(1)  //n2是对象,valueOf值是1

简单类型是没有属性的,那是如何调用toString()方法的呢?简单的类型是怎么用对象的方法的?以n1.toString为例
生成一个临时对象,临时对象里再调用toString(),具体步骤如下:
1、n1.toString(),
2、生成一个临时对象temp,temp = new Number(n1)
3、temp对象调用toString(),temp.toString()

简单类型加上一个属性并赋值,是否可以取到该属性的值?

var n1 = 1
n1.*** = 2  //临时对象被回收
n1.*** = ?  //undefined

所以JS中简单类型也可以看作是一个对象

当一个变量使用一个属性或方法时,JS会判断此变量是否是对象,若不是对象,则包装成一个对象。

原型

object的共有属性 Object.protype,这就是原型,Object的共有属性是所有对象的共有属性
prototype属性,这个属性包含一个对象__proto__,用来存共有属性

var o1 = {}
o1.__proto__ === Object.prototype    //true

原型链

JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。

var 对象 = new 函数()
对象.__proto__ === 函数.prototype

__proto__  //对象的属性
prototype  //函数的属性

函数.prototype 也是一个对象
函数.prototype.__proto__ === Object.prototype

如下例

var n = new Number(2);
n.__proto__  //存Number的共有属性
n.__proto__ === Number.prototype  //true
n.__proto__.__proto__  //存对象的共有属性
n.__proto__.__proto__ === Object.prototype  //true

Number.prototype是Number共有属性的引用
n.__proto__是Number的共有属性的引用

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