【发布时间】:2013-05-10 07:20:39
【问题描述】:
我最近在很多项目中都使用了 Knockout.js,并且我正在编写很多重复的代码。我希望能够定义一个BaseViewModel 类并让我的特定于页面的 ViewModel 继承自它。我对如何做到这一点感到有点困惑是 Javascript。这是我的基本BaseViewModel:
(function (ko, undefined) {
ko.BaseViewModel = function () {
var self = this;
self.items = ko.observable([]);
self.newItem = {};
self.dirtyItems = ko.computed(function () {
return self.items().filter(function (item) {
return item.dirtyFlag.isDirty();
});
});
self.isDirty = ko.computed(function () {
return self.dirtyItems().length > 0;
});
self.load = function () { }
};
}(ko));
我希望能够在BaseViewModel 中列出诸如load 之类的方法的签名,然后在继承的ViewModel 中对其进行定义。这有可能吗?我在网上找到了一些解决方案,但它们都依赖于定义函数/类来使继承工作。
【问题讨论】:
-
为什么要将
undefined传递给函数? -
嗯,以前从未见过。我也从未遇到过不这样做会导致错误的情况,他也没有解释这种情况是什么。
-
如果您正在编写供他人使用的代码,这是一种防御技术。可以重新定义
undefined符号。声明函数参数undefined,然后不为该参数传递任何值是一种捕获实际undefined值的技术,即使有人重新定义了该符号。碰巧的是,它还可以让您的 JS 最小化器最小化您对undefined的使用,因为它现在只是一个局部变量。
标签: javascript inheritance knockout.js prototype