在小提琴中 - http://jsfiddle.net/7fh0x901/1/我在调用show方法时未定义。怎么了?
我在寻找什么 - 尝试在调用对象时初始化名称和年龄。
function a(name, age) {
this.name;
this.age;
(function x() {
this.name = name;
this.age = age
alert(this.name+" <<inside self invoking>> "+this.age);
})();
this.show = function() { alert(this.name+" <<show>> "+this.age); }
}
var a1 = new a("rahul", 24);
a1.show();
答案 0 :(得分:0)
摆脱x()
功能。它不是必需的并且会导致问题,因为{J}中的每个函数调用都会重置this
,因此this
函数中的x()
值将是window
对象或{ {1}}(如果是严格模式)。
您可以改为使用此简化:
undefined
答案 1 :(得分:0)
您在内部函数x中创建了一个新范围,因此“this”与之前的“this”不同。也许你想要定义的是
function a(name, age) {
this.name;
this.age;
var that = this;
(function x() {
that.name = name;
that.age = age
alert(that.name+" <<inside self invoking>> "+that.age);
})();
this.show = function() { alert(this.name+" <<show>> "+this.age); }
}
var a1 = new a("rahul", 24);
a1.show();
我认为你正在寻找这个。
答案 2 :(得分:-1)
正确构建
function a(name, age) {
this.age = age;
this.name = name;
show: function() { alert(name+' '+age); }
}