4

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

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

4

3 回答 3

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 () {}
    });
于 2012-05-27T15:08:01.893 回答
2

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

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

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

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

Person.prototype = new BaseViewModel();

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

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

   self.firstname = ko.observable();

}

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

于 2012-09-25T22:07:25.787 回答
0

这是来自 crockford.com 的链接,
它是了解面向对象 Javascript 的最佳地点。
虽然他的方法一开始并不复杂。它是最好的资源之一,因为他以持续参与 JavaScript 语言的开发、推广数据格式 JSON(JavaScript Object Notation)以及开发各种 JavaScript 相关工具(如 JSLint 和 JSMin)而闻名。

于 2012-05-27T15:46:58.567 回答