原型与原型链

Object

var o = {name:"a"}
在对象中,会把一些共有属性以隐藏属性__proto__的形式链接到另一个对象,这个公有对象中存储的属性就是所有object拥有的属性,当然这个公有对象也有__proto__属性,但是它指向null。
用consolel.log可以打印出对象o中的所有属性,包括隐藏属性__proto__,它指向Object对象。

原型与原型链_第1张图片
image.png

再用console.log打印出Object对象,里面的属性就是对象的共有属性,每个对象都可以调用这些属性。
原型与原型链_第2张图片
image.png

Number

var n = new Number(1)
与Object不同的是,Number()是一种函数,虽然函数也是一中对象,但是它的__proto__属性不是直接指向Object的,而是先指向Number对象

原型与原型链_第3张图片
image.png

打印Number,Number中也有 __proto__,此时的 __proto__指向的才是Object。
原型与原型链_第4张图片
image.png

公式

var 对象 = new 函数()
对象.proto === 对象的构造函数.prototype
// 推论

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 的实例!


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