我正在尝试学习如何在JavaScript中使用匿名函数。因此,我创建了一个匿名函数,然后添加了内部函数tigerInner(),并在该函数中尝试访问外部作用域中的成员,但未定义错误。
var tiger = function(name, info) {
var name = name;//put this as private member
this.behave = info;
console.log("tiger: " + name + " " + behave);
this.tigerInner = function(){
console.log('name: ' + name);
console.log("tigerInner, behave: " + this.behave);//undefined error "this.behave"
}
}
var test = tiger("tiger", "eating");
test.tigerInner();
您的主要问题是:
您分配info
给this.behave
,然后使用behave
代替info
或this.behave
。更改behave
为this.behave
您所在console.log
行中的。
您编写的代码像构造函数一样工作(假设一个新构造的对象为,this
并且不返回任何内容),但您并未将其称为构造函数。为此,您需要使用new
关键字:var test = new tiger("tiger", "eating")
。
另外,您的行var name = name
没有执行您想像的操作-它没有执行任何操作,因为name
它已经像局部变量一样工作了,您只需将其分配给自己即可。因此,您可以删除该行。
这是我的建议,固定代码如下所示:
var tiger = function(name, info) {
this.behave = info;
console.log("tiger: " + name + " " + this.behave);
this.tigerInner = function(){
console.log('name: ' + name);
console.log("tigerInner, behave: " + this.behave);
}
}
var test = new tiger("tiger", "eating");
test.tigerInner();
一种不new
使用该方法的替代方法,则需要使用并返回您自己创建的新对象-只是this
按照其他答案中的建议返回就可以了,但是实际上将您behave
和tigerInner
属性放入了全局对象,并在最后返回了全局对象本身(并且将在严格模式下崩溃)。该new
稀少的解决方案是这样的:
var tiger = function(name, info) {
var obj = {};
obj.behave = info;
console.log("tiger: " + name + " " + obj.behave);
obj.tigerInner = function(){
console.log('name: ' + name);
console.log("tigerInner, behave: " + obj.behave);
};
return obj;
}
var test = tiger("tiger", "eating");
test.tigerInner();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句