var Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
})();
var Greeting = (function(){
Greeting.prototype = new Greeter();
Greeting.prototype.constructor = Greeter;
function Greeting(greeting){
}
return Greeting;
})();
var greeting = new Greeting("World");
alert(greeting.greet());我试图使用javascript原型来操作继承。我的班级结构和上面一样。但是当我调用greet方法时,它会显示一些东西,如下面的图片所示。有人能在这件事上指点我吗?

发布于 2014-01-27 17:38:42
在创建Greeter对象时,您永远不会调用“构造函数”函数Greeting。所以this.greeting = message;线永远不会运行,这就是为什么它是undefined。
您必须手动插入该行:
function Greeting(greeting){
this.greeting = greeting;
}或者调用父构造函数:
function Greeting(greeting){
Greeter.call(this, greeting);
}发布于 2014-01-27 17:38:21
在你的希腊人的“问候”方法中,你叫this.greeting。但是,在您的问候语对象中,还没有定义“问候”方法.
发布于 2014-01-27 17:38:51
当您调用greeting.greet()时,this.greeting就是undefined,因此问题就来了。
解释:
试试下面的代码:
var Greeter = (function () {
function Greeter(message) {
this.greeting = message;
}
Greeter.prototype.greet = function () {
return "Hello, " + this.greeting;
};
return Greeter;
})();
console.log('Log 1: ' + Greeter);
var Greeting = (function(){
console.log('Log 2: ' + Greeting);
Greeting.prototype = new Greeter();
console.log('Log 3: ' + Greeting);
Greeting.prototype.constructor = Greeter;
console.log('Log 4: ' + Greeting);
function Greeting(greeting){
}
console.log('Log 5: ' + Greeting);
return Greeting;
})();
console.log('Log 6: '+Greeting);
var greeting = new Greeting("World");
alert(greeting.greet());您将看到Greeting只是一个空函数,但以Greeter作为原型。因此,new Greeting('World')创建了以下函数:
function Greeting(greeting){
}包含greeting (未定义)、constructor (函数)和greet (函数)的原型。反过来,Greeting.prototype.greet有这样的定义:
Greeting.prototype.greet = function () {
return "Hello, " + this.greeting;
};但是this.greeting在这个上下文中是没有定义的,因为this指的是Greeting.prototype.greet,而不是Greeter。因此,这些行:
var greeting = new Greeting("World");
alert(greeting.greet());失败,因为greeting.greet()返回与未定义值连接的Hello,。
https://stackoverflow.com/questions/21387654
复制相似问题