《JS中的原型与原型链》

原型与原型链:

简单的说就是一个公用属性,将各数据类型都有的函数和方法放到一个地方去,然后想用的时候就从哪个地方拿,这样可以节省内存。

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是函数才会有的属性。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42617604/article/details/88741096