这里的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
?
答案 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);
请参阅下面的提醒输出。
myObject = new Warrior("name");
将在您的示例中创建闭包函数。 MyObject就是这个。