如何在Javascript中实现继承?我开始使用Knockout.js并实现ViewModels / page。但是我有一些函数/代码,我希望它在所有ViewModel中共享。
我想知道如何在这种情况下实现继承?
答案 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)而闻名。