gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 20:47:04 25 4
gpt4 key购买 nike

我最近开始在一个项目中使用原型(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com