Javascript类,为什么在实例化后可以访问此var

时间:2014-08-31 07:13:16

标签: javascript oop

这里的Javascript新手,这段代码没有意义。

function Warrior(n){
 var name = n;
 this.name = function(n){
   if( n ) name=n;
    return name;
  }  
}

Warrior.prototype.toString = function(){
    return "Hi! my name's "+this.name();
}

将Warrior的实例转换为字符串有效,调用name函数可以使用或不使用params ...为什么,var name在构造类之后不应该死?为什么它似乎流连忘返?如果vars停留,那么为什么要使用this

3 个答案:

答案 0 :(得分:1)

任何函数都可以在自己的作用域中创建变量,并访问其作用域中的任何变量或任何包含作用域的变量。如果变量仍然可以某种方式访问​​,它仍然存在,而内部函数是变量可以保持可访问的一种方式。那么,问题是如何使可以访问变量的函数可访问;这可以通过this来完成。在这里,它是。

答案 1 :(得分:1)

  

在构造类之后不应该将var命名为die?

不,name变量需要this.name变量显示this

  

如果vars停留,为什么要使用它?

在JavaScript中,var用于将公共方法和数据公开为构造对象的属性。变量(使用{{1}}关键字声明)是函数的内部函数,除非由Closure公开(就像你的情况一样)。

此外,JavaScript中没有“类”这样的东西。有对象,但它们的结构和继承是使用功能样式和原型继承定义的。

请参阅Closure

答案 2 :(得分:0)

变量死,除非它仍被对象使用。有几种方法可以创建闭包。

函数中的“this”指向调用函数,默认情况下是窗口对象。除非使用新的构造函数。

thisObject = new Warrior("hello");

将此指向新的thisObject。

这可以在内部函数中用来指向none全局(这将指向调用函数命名空间)...然后你将返回函数来维护私有n变量。

myobject = Warrior("hello");

但这不是你的部分代码所指示的方法。

function Warrior(n){
 var name = n;
 alert(this);
 this.name = function(n){
   if( n ) name=n;
    return name;
  }  
}
Warrior("hello");
window.alert(name);

请参阅下面的提醒输出。

enter image description here enter image description here

myObject = new Warrior("name");

将在您的示例中创建闭包函数。 MyObject就是这个。