javascript oop私有方法访问公共属性

时间:2016-09-13 18:00:17

标签: javascript oop

function foo(){
    this.a = 123;

    b();

    function b(){
        alert(this.a);//undefined
    }
}


var o = new foo();
o.a = 456;

我是js oop的新人,我尝试通过私人方式访问公共财产' b(){}'

但它显示未定义的

我也希望从外部更改此属性,但在更改属性值之前考虑对象将首先构建,有人如何解决此问题?

3 个答案:

答案 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;