成员函数不是函数错误

member function isn't a function error

本文关键字:函数 错误 成员      更新时间:2023-09-26

使用下面的代码:

function thing(){
    function majig(){
        alert("done");
    }
}
var mything = new thing();
mything.majig();

我得到这个错误:TypeError:神话。Majig不是一个函数

我做javascript有一段时间了,我做过函数作为函数的一部分,以前调用过它们。我知道这一定是我遗漏或忘记的一些简单的东西,但是各种网络搜索(以及在这里闲逛)给了我更深入的理论答案,或者似乎表明这应该是可行的例子。

我知道TypeError: foo不是函数通常意味着语法错误。我查了一些例子,它看起来就像我的语法是正确的(我尝试了一些没有成功的变化)。

这一定是一个愚蠢的简单错误,但我现在只是没有抓住它。我该怎么做才能使mything.majig();正常运行?

您已经在thing中声明了一个函数,但它根本没有附加到this。试试这个:

function thing(){
    this.majig = function() {
        alert("done");
    }
}
var mything = new thing();
mything.majig();
交替

:

function thing() {
  return {
    majig: function() {
      alert("done");
    }
  };
}

或者更好:

function thing() { }
thing.prototype.majig = function () {
  alert('done');
}

语法不是你想的那样。它不是成员声明。它是一个内函数。内部函数就像局部变量一样——它们只能在外部函数的作用域中访问:

function foo () {
    function bar () {}
    bar(); // accessible here
}
bar(); // undefined here

如果你的函数是构造函数,那么要将成员函数添加到它所构造的对象中,你需要将其添加到构造函数的原型中:

function Foo () {}
Foo.prototype.bar = function () {}; // bar is a member of object Foo
var f = new Foo();
f.bar(); // call member function
javascript中的

对象是动态的。它们的行为更像其他语言中的映射/散列。这意味着你可以直接向对象添加成员函数,而不是构造函数的原型:

var f = {};
f.bar = function () {};
f.bar(); // call member function

按照上面的逻辑,由于构造函数中的this引用正在构造的对象,您还可以动态地向this添加一个函数。这通常被称为"装饰",因为它实际上是装饰器设计模式的特别版本:

function Foo () {
    this.bar = function () {}
}
var f = new Foo();
f.bar();