function foo(){
this.a = 123;
b();
function b(){
alert(this.a);//undefined
}
}
var o = new foo();
o.a = 456;
我是js oop的新人,我尝试通过私人方式访问公共财产' b(){}'
但它显示未定义的
我也希望从外部更改此属性,但在更改属性值之前考虑对象将首先构建,有人如何解决此问题?
答案 0 :(得分:1)
this
绑定的方式与定义函数的位置无关,也与调用函数的方式无关。
在您的情况下,您将该函数作为常规函数调用,这意味着this
将绑定到全局对象(或严格模式下的undefined
)。
答案 1 :(得分:1)
我用ECMA6语法为你重写了它,所以它更容易阅读,并纠正它:
class foo {
constructor() {
this.a = 123;
this.b();
}
b() {
alert(this.a);
}
}
var o = new foo();
o.a = 456;
答案 2 :(得分:1)
prototype
用于在javascript
中创建一个类及其方法。我根据原生javacript
修改了您的示例:
function foo(){
this.a = 123;
this.b();
}
foo.prototype.b = function b(){
alert(this.a);
}
var o = new foo();
o.a = 456;