[英]Calling a function declared in the prototype function from the base “class”: JavaScript prototyping
我最近開始為項目使用原型。 這是我第一次使用原型,所以仍然發現我的雙腿:)我來自面向對象的背景,因此,如果我的某些術語不正確,請原諒。
我使用它的主要原因之一是為項目創建一個范圍界定框架,以避免以后出現任何沖突。 我還使用它來創建分布在多個文件中的對象。
但是我遇到了麻煩。
我在一個文件中聲明我的基本“類”。 然后在另一個文件中,聲明該類的擴展。 在此擴展中,我聲明一個函數,然后嘗試從基類中調用該函數。 最后,我在基類中聲明一個擴展實例,以允許我從基類中調用擴展函數。
但是,當我嘗試創建實例時,出現以下錯誤:
SCRIPT445:對象不支持此操作leave.js,第2行字符5
這是我的代碼片段:
離開
var _LEAVE = function () {
this.WORK_LIST = new this._WORK_LIST();
}
worklist.js
_LEAVE.prototype._WORK_LIST = function (params) {
var Render = function(){
...
}
}
關於我在做什么錯以及如何解決它的任何建議將不勝感激。
好吧,首先,如果您不了解基於原型的繼承,那么我建議您學習一下。 實際上,這真的很簡單。
其次,請不要以錯誤的方式處理此問題-您的代碼讓我討厭。 我了解您來自古典背景,並且尊重您所做的努力。 但是,說實話,即使我付了錢,我也不想閱讀您的代碼。
這就是我要做的(如果我的程序不是您想要的程序,請更正我,但我真的不知道您的代碼中正在發生什么):
// 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 () {};
}
此外,由於您來自古典背景,因此可以幫助您編寫更符合古典繼承樣式的代碼。 閱讀此答案 。 它將對您有很大幫助。
編輯:使用我的腳本,您可以按照以下方法在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);
您可以修補小提琴 。
如果你還沒有實例化_LEAVE
有new
, this
將涉及window
對象。 嘗試以下方法:
var _LEAVE = function () {
this.WORK_LIST = new this._WORK_LIST();
}
_LEAVE.prototype._WORK_LIST = function (params) {
var Render = function(){
...
}
}
console.log(new _LEAVE());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.