成员函数不是函数错误
member function isn't a function error
使用下面的代码:
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();
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- Javascript搜索函数错误
- Chrome Javascript日期构造函数错误
- 浏览器中出现javascript初始大写函数错误
- Createjs冲突问题localToLocal不是函数错误
- Java脚本函数错误
- 更新带有Javascript函数错误的变量
- 如何将对象插入对象列表的开头,当它有 unshift 不是函数错误
- 在将 Pickadate 与 Meteor 一起使用时,未定义不是函数错误
- 运行咕噜咕噜咕噜抛出 _.object 不是函数错误
- 了解函数(错误、数据)回调
- javascript中的typeof()函数错误
- 我一直在获取angularjs服务不是函数错误(LoginService.login不是函数)
- HTML5拖拽&drop正在抛出undefined不是函数错误
- Google Maps API a.lat不是函数错误
- getItemAtIndex不是函数错误
- Javascript停止函数错误
- 对话框函数错误无效函数
- Javascript 自定义函数错误
- 因果报应单元测试'未定义'不是函数错误