Object Variable Access in JavaScript: this.var or Not?
In JavaScript's object-oriented programming model, it's common to wonder if every variable within an object requires the this keyword.
this.var vs. Local Variables
Unlike C 's class-based model, JavaScript uses prototypical inheritance. In prototypical inheritance, everything is an object, and objects can inherit from other objects.
In JavaScript, a constructor function, invoked with the new keyword, creates new objects and assigns properties to them. The this keyword within a constructor refers to the newly created object.
Methods, accessible through the this keyword, are functions called on objects. However, local variables declared within a method's scope are not directly accessible by this.
Example:
function Foo() { this.bar = 0; this.getBar = function() { return this.bar; }; }
In this example, this.bar refers to the bar property of the Foo instance. However, bar inside the getBar method refers to a local variable that is undefined by default. To access the property, you need to use this.bar.
Private Attributes through Closures
To create private attributes, JavaScript relies on closures. Functions defined within a constructor's scope have access to the local variables of that constructor. Thus, by creating functions within a constructor and exposing them as privileged methods, you can maintain private attributes.
Example:
function Foo() { var bar = "foo"; this.getBar = function() { return bar; }; }
In this example, bar is a local variable of the Foo constructor. The getBar method is a privileged method that has access to bar.
Prototype Methods and Privileged Methods
Methods defined on the prototype object are inherited by all instances. However, they do not have access to privileged methods unless the child prototype inherits from the parent prototype.
In summary, while this.var is required for accessing object properties from within methods, it is not essential for local variables. Privileged methods, defined as closures within the constructor, provide a mechanism for creating private attributes in JavaScript's object-oriented programming model.
The above is the detailed content of When Should I Use `this.var` to Access Variables in JavaScript Objects?. For more information, please follow other related articles on the PHP Chinese website!