首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JS中编写原型继承的最简洁方法

在JS中编写原型继承的最简洁方法
EN

Stack Overflow用户
提问于 2013-03-20 09:01:36
回答 1查看 110关注 0票数 0

在某种程度上,我还是JS新手,我正在尝试理解使用原型和继承的最好/最干净的方式。

通常,我会像这样编写对象/原型定义:

代码语言:javascript
复制
var Foo = function(data) {
  this.data = data;
};
Foo.prototype = {
  someMethod: function() {
    return "whatever";
  }
};

我喜欢这样,因为我经常使用更深几层的名称空间对象,所以它实际上可能看起来更像这样:

代码语言:javascript
复制
App.Model.FooModel = function(){...};
App.Model.FooModel.prototype = {...};

这很好,因为我不需要输入每个方法的全名来编写原型,只需要输入名称,即。someMethod: function(){}而不是App.Model.FooModel.prototype.someMethod = function(){}

现在,我遇到的问题是,我不确定如何在JS中使用继承来做到这一点。如果我这样做,我可以让继承工作得很好:

代码语言:javascript
复制
var Child = function(){...};
Child.prototype = new Parent;
Child.prototype.someMethod = function(){...};

...but现在在一个更复杂的应用程序中,我们又要为每个方法写出对象的全名,我发现这既乏味又难于阅读。

所以,我的问题是:除了使用对象的全名附加所有子方法之外,是否有一种干净、直接的方法来编写继承自另一个对象的原型?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-20 10:37:48

好吧,这是javascript,你可以随时写你自己的:

代码语言:javascript
复制
function construct ( parent, fn, attr ) {
    fn.prototype = new parent();

    for (var x in attr) {
        fn.prototype[x] = attr[x];
    }
    return fn;
}

如果需要,您可以执行hasOwnProperty检查,但为了清楚起见,上面的实现是最简单的。此函数将这三个步骤封装为一个步骤。您现在可以简单地执行以下操作:

代码语言:javascript
复制
var Foo = construct(
    Parent,
    function(data) {
        this.data = data;
    },
    {
        someMethod: function() {
            return "whatever";
        }
    }
);

如果你不喜欢它的语法,你总是可以想出一个更好的。另一种实现方式是简单地实现attr扩展部分,然后正常地进行继承:

代码语言:javascript
复制
function extend (obj, attr) {
    for (var x in attr) {
        obj.prototype[x] = attr[x];
    }
    return obj;
}

同样,为了清晰起见,进行了简化。因此,语法现在变成:

代码语言:javascript
复制
var Foo = function(){...};
Foo.prototype = new Parent;
extend(Foo.prototype,{
    someMethod : function(){...}
});
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15513425

复制
相关文章

相似问题

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