原型与原型链:
简单的说就是一个公用属性,将各数据类型都有的函数和方法放到一个地方去,然后想用的时候就从哪个地方拿,这样可以节省内存。
var o1 = new Object();
var o2 = new Object();
o1.toString === o2.toString; //true,toString()指向是一样的
这是因为因为JS把这两个方法都保存到内存里了,在声明一个对象时,会自动为其添加 __ proto __属性,靠这个属性能够访问到toString()方法。
三个例子:
(1)
var o1 = new Object();
o1.__proto__ === Object.prototype; //true
指向Object共有属性
(2)
var s = new String('1');
s.__proto__ === String.protype; //true
s.__proto__.__proto__ === Object.prototype; //true
其他数据类型也符合该等式
(3)等式
var 对象 = new 函数();
对象.__proto__ === 函数.prototype;
// 推论
var number = new Number()
number.__proto__ = Number.prototype
var object = new Object()
object.__proto__ = Object.prototype
var function = new Function()
function.__proto__ = Function.prototype
// 另外,所有函数都是由 Function 构造出来的,所以
Number.__proto__ = Function.prototype // 因为 Number 是函数,是 Function 的实例
Object.__proto__ = Function.prototype // 因为 Object 是函数,是 Function 的实例
Function.__proto__ == Function.prototye // 因为 Function 是函数,是 Function 的实例!
__ proto __与 prototype 的区别:
简单的说就是__proto__是每个对象都有的一个属性,而prototype是函数才会有的属性。