首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在javascript中发布Prototyping

在javascript中发布Prototyping
EN

Stack Overflow用户
提问于 2014-01-27 17:34:26
回答 5查看 366关注 0票数 2
代码语言:javascript
复制
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方法时,它会显示一些东西,如下面的图片所示。有人能在这件事上指点我吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-01-27 17:38:42

在创建Greeter对象时,您永远不会调用“构造函数”函数Greeting。所以this.greeting = message;线永远不会运行,这就是为什么它是undefined

您必须手动插入该行:

代码语言:javascript
复制
function Greeting(greeting){
    this.greeting = greeting;
}

或者调用父构造函数:

代码语言:javascript
复制
function Greeting(greeting){
    Greeter.call(this, greeting);
}
票数 2
EN

Stack Overflow用户

发布于 2014-01-27 17:38:21

在你的希腊人的“问候”方法中,你叫this.greeting。但是,在您的问候语对象中,还没有定义“问候”方法.

票数 2
EN

Stack Overflow用户

发布于 2014-01-27 17:38:51

当您调用greeting.greet()时,this.greeting就是undefined,因此问题就来了。

解释:

试试下面的代码:

代码语言:javascript
复制
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')创建了以下函数:

代码语言:javascript
复制
function Greeting(greeting){
}

包含greeting (未定义)、constructor (函数)和greet (函数)的原型。反过来,Greeting.prototype.greet有这样的定义:

代码语言:javascript
复制
Greeting.prototype.greet = function () {
    return "Hello, " + this.greeting;
};

但是this.greeting在这个上下文中是没有定义的,因为this指的是Greeting.prototype.greet,而不是Greeter。因此,这些行:

代码语言:javascript
复制
var greeting = new Greeting("World");
alert(greeting.greet());

失败,因为greeting.greet()返回与未定义值连接的Hello,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21387654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档