Javascript 对象函数不是一个函数
这是基本代码。问题是,调用Init时,会出现以下错误:Javascript 对象函数不是一个函数,javascript,oop,function,object,Javascript,Oop,Function,Object,这是基本代码。问题是,调用Init时,会出现以下错误: var plugin = { Init: function() { this.UpdateUI(); if (this.Status() == 1) { ... } else { ... } }, Status: function() { ... }, UpdateUI: f
var plugin = {
Init: function() {
this.UpdateUI();
if (this.Status() == 1) {
...
} else {
...
}
},
Status: function() {
...
},
UpdateUI: function() {
...
}
}
有人能告诉我我的代码有什么问题吗?那是因为
这个在插件里面。Init
指的是插件。Init
而不是插件本身。更改如下:
this.UpdateUI is not a function
this.Status is not a function
原型:
var plugin = {
Init: function() {
plugin.UpdateUI();
if (plugin.Status() == 1) {
...
} else {
...
}
},
Status: function() {
...
},
UpdateUI: function() {
...
}
}
在称为init的上下文中,这可能是其他内容
尝试使用plugin.UpdateUI
和plugin.Status
,它们总是引用正确的函数。你能发布调用Init()
的代码吗?范围问题,这个不是指插件,而是指Init函数。如果将Status和UpdateUI函数放在init函数中,那么代码将正常工作。我认为bardiir为您提供了正确的解决方案。我认为我们刚刚发现了javascript丑陋的一面,根据对我答案的投票,似乎对此有一些不同的观点:D@CoryDanielson:我们不知道this
指的是什么,因为我们不知道如何调用Init
。但是这不是一个范围问题,仅仅将函数放在Init
函数中是行不通的。为什么这个
不能渗透到函数体中?你确定这是可能的吗?对,这样的代码是无效的。您需要将self
替换为plugin
对不起。我想我看到了一个原型声明。事实上,在对象文本中,您不能这样做。我修改了代码以直接引用插件
,尽管我认为更好的方法是声明一个实际的类/原型。-1,对不起。前提是错误的,“修复”会破坏OOP(因为这些方法总是引用插件
,即使它们被复制到另一个对象)。我收回我的陈述,即您显然熟悉原型:您的示例标记为“Prototype”,实际上根本没有使用原型,而是使用构造函数。
function Plugin(){
var self = this;
this.Init = function() {
self.UpdateUI();
if (self.Status() == 1) {
...
} else {
...
}
};
}
Plugin.prototype.status = function() {
...
};
Plugin.prototype.UpdateUI: function() {
...
}
var plugin = new Plugin();