函数在JavaScript函数的原型链中的位置?
工作示例:在Chrome的控制台中,我创建了以下函数:
> var f = function() { alert(1); }
使用f()
的调用正确地导致了数字1的警报。在使用以下控制台语句检查函数时:
> console.dir(f)
注意原型是如何以键/值对prototype: Object
的形式作为对象列出的,这意味着函数f
是直接从对象继承的。非常公平;JavaScript中的数组和其他实体也是从对象继承的。
冲突产生于以下观察。输入以下命令:
f instanceof Function
这导致了true
。
据我所知,用户创建的函数继承了函数对象,而函数对象又继承了对象;然而,对于我的生活,我无法通过检查f的原型链来找到它。
函数f?Function
的原型链中在哪里?
泰文
发布于 2014-01-23 21:30:00
函数f的原型链中函数在哪里?
Function
本身不是,而是Function.prototype
。它应该就在“下面”函数f
f
|
v
Function.prototype
|
v
Object.prototype
|
v
null
注意原型是如何以键/值对prototype: Object的形式作为对象列出的
您所看到的f
的f
属性是该函数自己的prototype对象-假设f
是一个构造函数,那么所有new f
实例都将从f.prototype
继承。
这意味着函数f直接从对象继承。
不是的。不能将公共.prototype
属性与内部原型链(通常表示为[ prototype ]内部属性)混淆。您可以使用Object.getPrototypeOf
访问原型链。有关这方面的更多信息,在 VS. prototype in JavaScript,可能是Why functions prototype is chained repeatedly?或http://eloquentjavascript.net/chapter8.html。
发布于 2014-01-23 21:41:32
我是从一开始的人谁来这个帖子寻找信息。
kmiklas可以忽略一切,只需跳到最后的链接。任何对Javascript不确定的人都应该继续阅读下面的内容。
//从一开始开始。
在JavaScript中,几乎所有东西都是一个对象。即使是原始数据类型(除了null和未定义的数据类型)也可以作为对象来处理。
布尔值可以是对象,也可以是原始数据,数字可以是对象,也可以是原始数据,字符串也可以是对象,或者原始数据也可以处理为对象,日期总是对象,数学和正则表达式总是对象,数组总是对象,函数总是对象。
JavaScript是一种面向对象的语言,但是JavaScript不使用类。
在JavaScript中,您不定义类并从这些类创建对象(与大多数其他面向对象语言一样)。
JavaScript是基于原型的,不是基于类的。
Javascript中的每个对象都有一个原型。当消息到达一个对象时,JavaScript将首先尝试在该对象中找到一个属性,如果它找不到它,那么消息将被发送到对象的原型,依此类推。这就像基于类的语言中的单亲继承一样。
原型继承链可以维持您想要的时间。但是一般来说,制造长链并不是一个好主意,因为您的代码很难理解和维护。
-------> More info on Prototypes and Javascript (VERY USEFUL!!!) <-------
发布于 2014-01-23 21:42:33
我想你误解了javascript原型链。在控制台中试一试:
function AnObject(){
}
AnObject.prototype = {
aMethod: function() {
return "hi";
}
}
new AnObject().aMethod()
现在返回“嗨”。
您可以看到,AnObject.prototype无法返回AnObject祖先:实际上,它意味着要用要在AnObject实例上复制的方法覆盖它。
AnObject.prototype
现在回来了
{
aMethod: function() {
return "hi";
}
}
如果您想知道AnObject函数的类型,可以使用AnObject.constructor
,然后得到function Function() { [native code] }
https://stackoverflow.com/questions/21319594
复制相似问题