考虑这个JavaScript代码:
var x = new date()
// "ReferenceError: date is not defined" - useful error, hints at a typo ('D'ate)
var x = new MyClass.foo()
// "TypeError: undefined is not a function" - bad error, no hint it might be 'F'oo
错误本身是正确的,因为MyClass
没有foo
方法,因此MyClass.foo
确实返回undefined
,而new
没有'那样的。问题是这并没有暗示用户可能拼错了方法名称。现实生活中的例子:
new Meteor.collection('foo') // instead of:
new Meteor.Collection('foo') // c and C look alike with many fonts at small size
是否有可移植的方法来检测某个对象在 new
传递给它undefined
之前没有方法 ? __noSuchMethod__
正是我正在寻找的,但它看起来像是一个非标准的扩展。看起来像IE doesn't support it和V8 refused to implement it。 Chromium团队也doesn't care much about implementing Proxy support。
对于Node Proxy
和this以及this(“a polyfill即将推出的ECMAScript Reflect API“,但请参阅下面的mpm评论。”
相关问题(这个归结为什么):
答案 0 :(得分:3)
在这个问题之后一年多,V8可能更改了错误消息
var MyClass = function() {
this.Foo = function() { console.log("Foo"); }
}
new MyClass().foo();
今天产生此错误
未捕获的TypeError :(中间值).foo不是函数
与命名对象一起使用
var mc = new MyClass();
mc.foo();
它更有用
未捕获的TypeError:mc.foo不是函数
与对象名称中的拼写错误一起使用也很有用:
new myClass().foo();
未捕获的ReferenceError:未定义myClass