如何在 Javascript 中实现继承?我开始使用 Knockout.js 并实现 ViewModels/page。但是,我有一些函数/代码希望它在所有 ViewModel 之间共享。
我想知道在这种情况下如何实现继承?
如何在 Javascript 中实现继承?我开始使用 Knockout.js 并实现 ViewModels/page。但是,我有一些函数/代码希望它在所有 ViewModel 之间共享。
我想知道在这种情况下如何实现继承?
继承可能不一定是答案。为什么不使用每个 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 () {}
});
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。
这是来自 crockford.com 的链接,
它是了解面向对象 Javascript 的最佳地点。
虽然他的方法一开始并不复杂。它是最好的资源之一,因为他以持续参与 JavaScript 语言的开发、推广数据格式 JSON(JavaScript Object Notation)以及开发各种 JavaScript 相关工具(如 JSLint 和 JSMin)而闻名。