javascript - 从基址调用原型(prototype)函数中声明的函数 "class": JavaScript prototyping

标签 javascript prototype

我最近开始在一个项目中使用原型(prototype)设计。这是我第一次使用原型(prototype)设计,所以仍在寻找我的腿:)我来自面向对象的背景,所以如果我的一些术语不正确,请原谅。

我使用它的主要原因之一是为项目创建一个范围界定框架,以避免以后出现任何冲突。我还使用它来创建分布在多个文件中的对象。

但是我遇到了一些麻烦。

我在一个文件中声明我的基“类”。然后,在另一个文件中,我声明该类的扩展。在此扩展中,我声明了一个函数,然后尝试从基类调用该函数。最后,我在基类中声明了一个扩展实例,以允许我从基类调用扩展函数。

但是,当我尝试创建实例时,出现以下错误:

SCRIPT445: Object doesn't support this action leave.js, line 2 character 5

这是我的代码片段:

离开.js

var _LEAVE = function () {
    this.WORK_LIST = new this._WORK_LIST();
}

worklist.js

_LEAVE.prototype._WORK_LIST = function (params) {
    var Render = function(){
         ...
    }
}

任何关于我做错了什么以及如何解决它的建议将不胜感激。

最佳答案

好吧,首先如果你不理解基于原型(prototype)的继承那么我建议你learn关于它。其实很简单。

其次,请不要以错误的方式理解这一点 - 你的代码厌恶我。我知道你有古典背景,我尊重你所做的努力。然而,说实话,即使有人付钱给我,我也不想读你的代码。

这就是我会做的(如果我的程序不是您正在寻找的,请纠正我,但我真的不知道您的代码中发生了什么):

// baseClass.js

function BaseClass() {                       // class BaseClass
    var extendedObject = new Extension;
}

// extension.js

Extension.prototype = new BaseClass;         // Extension extends BaseClass
Extension.prototype.constructor = Extension; // reset the constructor property

function Extension() {                       // class Extension
    // some private variables

    var privateVar = null;
    function privateFunction() {}

    // some public properties

    this.publicVar = null;
    this.publicFunction = function () {};
}

此外,由于您来自古典背景,它可能会帮助您编写更符合古典继承风格的代码。阅读此answer 。这会对你有很大帮助。

编辑:使用我的script您可以按如下方式在 JavaScript 中创建类。

baseClass.js:

/*
    class BaseClass {
        var extension;

        function constructor() {
            extension = new Extension;
        }
    }
*/

var BaseClass = new Class(function () {
    var extension;

    function constructor() {
        extension = new Extension;
    }

    return constructor;
});

extension.js:

/*
    class Extension extends BaseClass {
        var secret;

        function constructor() {
            secret = null;
        }

        this.getSecret = function () {
            return secret;
        };

        this.setSecret = function (newSecret) {
            secret = newSecret;
        };
    }
*/

var Extension = new Class(function () {
    var secret;

    function constructor() {
        secret = null;
    }

    this.getSecret = function () {
        return secret;
    };

    this.setSecret = function (newSecret) {
        secret = newSecret;
    };

    return constructor;
}, BaseClass);

您可以修改 fiddle .

关于javascript - 从基址调用原型(prototype)函数中声明的函数 "class": JavaScript prototyping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13264397/

相关文章:

javascript - 为简单的 javascript 打字机添加字体覆盖

javascript - 添加事件监听器后的原型(prototype)继承问题

Javascript:如果不用定义原型(prototype)方法也能实现继承,为什么还要使用定义原型(prototype)方法来继承?

javascript - 扩展原型(prototype)函数而不覆盖它

javascript - 改变字符串值的字符串原型(prototype)

javascript - 为动态生成的表设置 id 时出现问题

javascript - 使用 Node.js 从不同的 js 文件引用构造函数

javascript - javascript中的函数语句和函数表达式

javascript - 如何识别Javascript版本

javascript - 替换字符串中的占位符值