使用原型检查本机定义的函数

时间:2012-05-10 01:23:16

标签: javascript function built-in

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。有什么区别以及为什么第一个失败?

2 个答案:

答案 0 :(得分:3)

String是构造函数,函数也是对象。您可以向其追加属性。

For example:

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