2016-11-17 34 views
2

我主要使用PHP和Java编写代码,但我偶尔会在项目的前端工作并使用JavaScript。我通常创建对象不同于下面,但我遇到了这一点,它引起了我的兴趣,因为它的语法与我通常编程的类似。Javascript类中的实例变量

我正在四处寻找,试图弄清楚如何使用实例变量JavaScript类使用下面的语法。我试过用name;_name;var name;或所有这些以前的变量声明实例变量,并添加= null;,但仍然在我的控制台中出现错误。错误主要是my-file.js:2 Uncaught SyntaxError: Unexpected identifier。我只是想通过我的构造函数设置我的实例变量。

如何在JavaScript中使用实例变量,使用下面的语法?

class MyClass { 
    var _name; 

    constructor(name) { 
    _name = name; 
    alert("Hello world, from OO JS!"); 
    this.myFunction(); 
    } 

    myFunction() { 
    document.getElementById("myElement").addEventListener("click", function() { 
     console.log("Ant's function runs. Hello!"); 
    }); 
    } 
} 

window.onload = function() { 
    var person = "John Smith"; 
    var myClass = new MyClass(person); 
} 
+0

使用'this'关键字:'this._name = name;' –

+0

您不声明属性;只需设置'this._name = name;'。 – Ryan

+0

@Ryan我如何在我的事件监听器中访问实例变量? 'this._name'只产生'undefined'。 – aCarella

回答

5

这仍然是一个proposal,它看起来如下:

class A { 
    property = "value"; 
} 

顺便说一句,当你要访问类属性(即自己的对象属性),你仍然需要使用this.property

class A { 
    property = "value"; 

    constructor() { 
     console.log(this.property); 
    } 
} 

如果你今天想用这个语法,你需要使用一个transpiler像Babel

3

您不声明属性;只需设置this._name = name

@Ryan我怎么才能在我的事件监听器中访问实例变量? this._name仅产生undefined

每个函数调用*都有自己的this;你的事件监听器是一个函数。您可以将事件侦听器和访问that以外分配var that = this;里面:

myFunction() { 
    var that = this; 

    document.getElementById("myElement").addEventListener("click", function() { 
    console.log(that._name); 
    }); 
} 

或创建一个新的功能,它始终与使用Function.prototype.bind相同this要求你:

myFunction() { 
    document.getElementById("myElement").addEventListener("click", function() { 
    console.log(this._name); 
    }.bind(this)); 
} 

或者使用ES6的箭头的功能,它们使用定义它们的值this(词汇this):

myFunction() { 
    document.getElementById("myElement").addEventListener("click",() => { 
    console.log(this._name); 
    }); 
} 
+0

超级有用。感谢您的解释。 – aCarella