2016-09-13 77 views
-1
function foo(){ 
    this.a = 123; 

    b(); 

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


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

我在JS接力新的,我尝试从私有方法访问公共财产 'B(){}'JavaScript的OOP私有方法访问公共财产

,但它显示未定义

我也希望从外面改变这个属性,但是考虑一下对象会在我改变属性值之前先构造,任何人如何解决这个问题?

+0

如果你想学习的JavaScript ..这家伙有真棒视频。在这里检查:https://www.youtube.com/channel/UCO1cgjhGzsSYb1rsB4bFe4Q –

+0

它看起来像你试图声明构造函数内的函数或东西。 – brianxautumn

回答

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; 
1

this被绑定的方式与您定义函数的位置以及与您如何调用函数有关的所有操作无关。

在你的情况,你正在调用函数作为一个常规函数,这意味着this将绑定到全局对象(或undefined严格模式)。

1

我改写为你在ECMA6语法,所以它更容易阅读,并修正它:

class foo { 
    constructor() { 
    this.a = 123; 
    this.b(); 
    } 

    b() { 
    alert(this.a); 
    } 
} 


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