我有以下代码:
function Foo() {
Foo.prototype.test = 0;
}
Foo.prototype.incTest = function() {
Foo.prototype.test++;
};
Foo.prototype.getTest = function(name) {
console.log(name +" this: " + this.test + " proto: " + Foo.prototype.test);
};
var bar = new Foo();
var baz = new Foo();
bar.getTest('bar');
bar.incTest();
bar.getTest('bar');
baz.incTest();
bar.getTest('bar');
baz.getTest('baz');
可以预见的输出是:
bar this: 0 proto: 0
bar this: 1 proto: 1
bar this: 2 proto: 2
baz this: 2 proto: 2
现在我尝试利用this
查找原型链,并更改incTest
为:
Foo.prototype.incTest = function() {
this.test++;
};
这给了我完全不同的输出!
bar this: 0 proto: 0
bar this: 1 proto: 0
bar this: 1 proto: 0
baz this: 1 proto: 0
不应该this.test
引用 Foo 原型属性吗?这里到底发生了什么?
编辑:
此外,将行更改为Foo.prototype.test = this.test++;
也会产生第二个输出,我不知道为什么。
编辑2:
第一次编辑的解决方案是后缀与前缀。前缀增量产生第一个输出。