es6

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

2019-01-22  本文已影响68人  elsa919

一、什么是原型?

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

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的公有属性

Var o1 = {}

O1.__proto__ = object.prototype

(2)number的公用属性

Var n1 = new number(1)

n1.__proto__ = number.prototype

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

(3)String / boolean的公用属性

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

什么是原型链?

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

上一篇 下一篇

猜你喜欢

热点阅读