0

在这个JSBin的代码中,我如何让 MultiPage 继承 Tool 的静态成员,以便我们可以编写 MultiPage.Nullo 或 MultiPage.datacontext?

4

2 回答 2

1

如何让 MultiPage 继承 Tool 的静态成员

这是不可能的。一个函数只能继承自Function.prototype,而两者之间不能继承。

但是,没有必要这样做。JavaScript 不是基于类的语言,对于您的实际问题有更好的解决方案。您还没有告诉我们您的用例,但标准解决方案是将属性放在prototype对象上,或者只是Tool.datacontextMultipage.

于 2012-12-14T13:34:06.550 回答
0

如果你想继承静态成员,除了将 Tool 的属性复制到 MultiPage 上之外别无他法。使用 jQuery 或 Underscore 很容易:

$.extend(MultiPage, Tool);
_.extend(MultiPage, Tool);

extend如果您不想添加任何实用程序库,您可以轻松地制作自己的:

function extend(target, source) {
    for(var key in source) {
        if (source.hasOwnProperty(key) && key !== 'prototype') {
            target[key] = source[key];
        }
    }
}

您不能简单地继承静态属性的原因是构造函数本身不能具有除Function. 因此,构造函数prototype(不是它自己的prototype属性,而是Function.prototype直接扩展构造函数对象的)始终Function.prototype在同一全局范围内的每个函数之间共享。

更新

截至 2016 年,主流浏览器都支持Object.setPrototypeOf。但是,正如您在链接文档中看到的那样,此功能破坏了各种引擎优化。我不推荐使用这个,因为你通常可以构建你的程序来避免它的缺点。

于 2012-12-14T12:42:46.713 回答