如何在javascript中实现继承?

时间:2012-05-27 14:49:15

标签: javascript jquery knockout.js

如何在Javascript中实现继承?我开始使用Knockout.js并实现ViewModels / page。但是我有一些函数/代码,我希望它在所有ViewModel中共享。

我想知道如何在这种情况下实现继承?

3 个答案:

答案 0 :(得分:6)

继承可能不一定是答案。为什么不使用每个ViewModel应实现的所有方法创建对象文字。我不熟悉淘汰赛,但是你可以在原生js中做到这一点。

    var sharedMethods = {
             run: function () {},
             jump: function () {}
        };

    function Person () {};
    // Use jQuery's extend method
    // Now person has run, jump, and talk
    $.extend(Person.prototype, sharedMethods, {
        talk: function () {}
    });

答案 1 :(得分:2)

JavaScript提供原型继承。对象确实从其他对象继承。这对于方法继承来说很好,但它不适用于属性继承。

通常要继承您可以使用的方法:

function BaseViewModel() { 
   var self = this;
   self.name = ko.observable();
}

function Person() {
   var self = this;
   self.firstname = ko.observable();
}

Person.prototype = new BaseViewModel();

但这导致所有人与原型共享同一个对象!当您更改一个人的名称时,值get将传播到所有人员。我倾向于使用jQuery的扩展方法。

function Person() {
   var self = this;
   $.extend(self, new BaseViewModel());

   self.firstname = ko.observable();

}

这样,BaseViewModel的值就会被复制到Person。

答案 2 :(得分:0)

Here's the link from crockford.com
它是了解面向对象Javascript的最佳场所 虽然他的方法起初并不复杂。它是最好的资源之一 因为他不断参与JavaScript语言的开发,推广数据格式JSON(JavaScript Object Notation),以及开发各种JavaScript相关工具(如JSLint和JSMin)而闻名。