JS对象中,在原型链上找到属性后 最终将值拷贝给原对象 而不是引用

遇到一个面试题

要求写一个函数A,每次进行new操作时候能输出2,3,4,5...

new A() // 输出2

new A() // 输出3

new A() // 输出4

 

 

 

function A()

{

  this.a++

  console.log(this.a)

}

A.prototype.a = 1

 

这样写是错误的,因为实例化对象中的a属性并不是原型上的引用,而是把原型上的a给拷贝了一份给a。

所以这样每次输出都是2.

 

 

正确答案:

function A()

{

  this.__proto__.a++

  console.log(this.a)

}

 

A.prototype.a = 1

 

// 2,3,4,5..

 

 

或者其实我挂载到函数上成为静态属性也可以

 

function A(){

  console.log(this.__proto__.constructor.a++)

}

A.a = 1

 

..

 

posted @ 2019-05-16 00:21  hh9515  阅读(266)  评论(0编辑  收藏  举报