原型和原型链
问题:在方法挂载到实例上时,实例化时该方法会被重复的拷贝
原型
在js中,每个函数(构造函数)都有一个属性叫做prototype,它指向一个的对象,这个对象称为原型
在new的时候,把构造的函数的原型赋值给新创建对象的原型
obj._proto_ = Con.prototype
js原型查找机制:
当访问函数对象的属性的时候,如果函数对象没有该属性,就会去对象的prototype
对象中查找,如果又没有找到,然后在普通函数对象的__proto__
原型对象中差找,直到Object.prototype.__proto__
结束查找,如果都没找到,就返回undefined。
原型链:
每一个对象都有自己的原型,原型也是普通对象,由于js有原型查找机制,顺着对象的原型去一直查找,直到Object.prototype.__proto__
为止,这样层层递进就形成链条
系统对象:
-
本地对象(非静态对象)(和环境无关)
什么是本地对象 (必须得new出来 得实例化之后才能用)
常用对象
Object、Function、Array、String、Boolean、Number、Date、RegExp
、Error对象的方法都是挂载在原型对象上的。
-
内置对象(静态对象)(和环境无关)
(列如:Math.ceil()
√ var obj=new Math() X 事实上Math只用他的类上的方法 )(不需要new出来 不需要实例化 直接就能拿来用的 叫静态对象)
Global、Math -
宿主对象(由浏览器提供的对象)宿主:js运行环境(一般就是浏览器)
DOM、BOM