Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对象函数不是一个函数_Javascript_Oop_Function_Object - Fatal编程技术网

Javascript 对象函数不是一个函数

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

这是基本代码。问题是,调用Init时,会出现以下错误:

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();