此question的答案是用来检查函数是否已定义:
typeof yourFunction === 'function'
但我在非标准函数link()上尝试过这个。实际上这返回了错误。该功能在我尝试的每个浏览器上都可用 - IE,Chrome,Opera,FireFox。
typeof String.link === 'function' // false
typeof String.link() === 'function' // Uncaught error ...
然后我找到了某个地方:
typeof String.prototype.link === 'function' //true
实际上返回true。有什么区别以及为什么第一个失败?
答案 0 :(得分:3)
String
是构造函数,函数也是对象。您可以向其追加属性。
function foo(){
alert('from foo');
}
foo.bar = function(){
alert('bar on foo');
}
foo(); //from foo
foo.bar(); //bar on foo
这与jQuery的$
如何像一个对象(例如。$.each()
)的行为一样,也就像一个函数一样(例如。$(selector)
)。
所以:
使用String.link
访问构造函数本身的属性 - 该属性不存在。
使用String.prototype.link
访问每个字符串附带的link()
函数 - 确实存在(以及您应该使用的函数)
答案 1 :(得分:0)
因为string是Object而没有link()方法。只有字符串才有这种方法。看:
String//Defines the Object
String.prototype//Defines the methods and properties that will be bound to a var of the type String
'foo'//This is a string
'foo'.link//So it has the link method
String//This is an Objecy that defines the strings
String.link//So it doesn't have the link method
String.prototype//An object that stores the methods and properties of the vars of type String
String.prototype.link//So it has the link method