JS里公用属性(原型与原型链)

一、什么是原型?

 在javascript中,全局函数Number、String、Boolean、Object等,都有toSting()、valueOf()等方法,倘若每个函数都独自定义这些相同的属性和方法,势必对内存造成极大的浪费。因此这些相同的属性和方法,都被集合到一起,对象可通过__proto__属性访问(公用的属性全部存在__proto__里)这些共用属性prototype,如图:

JS里公用属性(原型与原型链)_第1张图片
JS里公用属性(原型与原型链)_第2张图片

var n = new Number(1)

var obj = {}

obj.__proto__ === Object.prototype //true obj共用Object的属性

n.__proto__ === Number.prototype //true,n共用Number的属性

Number.prototype.__proto__===Object.prototype//true,Number.prototype 本身也是个对象,共用Object的属性

var s = new String('hi')

s.__proto__ === String.prototype //true

一般:object对象公有的属性有:toString   valueOf

Number公有属性有:toFixed   toExponential   toString() //可接16进制


公有属性就是原型:prototype

(1)object的公有属性

JS里公用属性(原型与原型链)_第3张图片

Var o1 = {}

O1.__proto__ = object.prototype


(2)number的公用属性

JS里公用属性(原型与原型链)_第4张图片

Var n1 = new number(1)

n1.__proto__ = number.prototype

n1.__proto__.__proto__ = object.prototype    // n1共有属性的共有属性


(3)String / boolean的公用属性

JS里公用属性(原型与原型链)_第5张图片

Var s1 = new String(‘1’)

s1.__proto__ = String.prototype

s1共有属性的共有属性:s1.__proto__.__proto__ = object.prototype


Var b1 = new Boolean(ture)

b1.__proto__ = Boolean.prototype

b1.__proto__.__proto__ = object.prototype    // b1共有属性的共有属性


语法:(1) var 对象 = new 函数()

(2)对象.__proto__ ===函数.prototype

Number.__proto__ === Function.prototype // true,因为 Number 是 Function 的实例

Object.__proto__ === Function.prototype // true,因为 Object 是 Function 的实例

Function.__proto__ === Function.prototye // true,因为 Function 是 Function 的实例!

Object.__proto__ ===Function.__proto__ // true,因为 Function.__proto__ === Function.prototye

JS里公用属性(原型与原型链)_第6张图片

什么是原型链?

每个实例对象(object )都有一个私有属性(称之为__proto__)指向它的原型对象(prototype)。该原型对象也有一个自己的原型对象(proto) ,层层向上直到一个对象的原型对象为 null。这种链式结构,称之为原型链。

你可能感兴趣的:(JS里公用属性(原型与原型链))