function Tree () {}
Tree.prototype.leaf = 0
Tree.prototype.addLeaf = function () {this.leaf++}
let tree1 = new Tree()
let tree2 = new Tree()
tree1.addLeaf()
tree1.addLeaf()
console.log(tree2.leaf)
更新:这里我把箭头函数去掉下
为什么输出是0.......求解惑
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
来晚了,根据楼主的更新,谈下自己的理解,抛砖引玉。。。:
this.leaf++ 可以看做:
this本身原来是是没有leaf属性的,所以会去this的原型链上找,结果在Tree.prototype找到了(Tree.prototype.leaf = 0),所以这句可以看成:
相当于在this上增加了leaf属性为1,下次访问this.leaf已经不会从原型链取值了。
所以tree1执行完2次addLeaf之后是:
而tree2还是空的,自身没有leaf属性,tree2上访问leaf属性仍会去原型链上找,原型上leaf还是0。
很简单,
this指向与原型问题。结果为1,你倒数第二句语句打错了
没看懂,你这描述里面没有箭头函数啊?
如果你问的就是你所写的代码,那可以这样解释:因为你没有执行实例上的这个函数啊!
那当然最后
tree2.leaf还是0了!我赞同一楼的回答,但是还有一问想请解答:
当Tree的原型对象里面有一个
对象字面量属性时,情况似乎不太一样了:请问,这里为什么又是20?为什么没有在tree1里单独创建一个属性,而是修改的是原型上值?