js中先有Function还是先有Object

XT是猛MAN 2014-04-28 10:37:40
我们知道js中函数是Function类型的实例,而Object是一个构造函数,故也是Function类型的实例。又因为js中所有对象都是继承Object类型,Function是一个构造函数,当然也就是个对象,所以也继承Object。那这样,就有个问题,Function的产生需要Object,而Object产生又需要Function,那到底是先有哪个,js中具体是怎么实现的?有大神知道吗?这个问题貌似有点像,鸡和蛋的问题。
...全文
852 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
r610492664 2015-12-24
  • 打赏
  • 举报
回复
渐行渐远888 2014-12-09
  • 打赏
  • 举报
回复
JS真的是设计的太精妙了,缺点是常规面向对象思维是很难理解她的!
渐行渐远888 2014-12-09
  • 打赏
  • 举报
回复
引用 16 楼 ahui1984 的回复:
[quote=引用 15 楼 u011461314 的回复:] 你这种结论,对目前的我来说,只有一句话: 什么乱七八糟的东西。
屁都不懂还来瞎闹!5楼才是真正大师![/quote] 说错了,3楼(l676331991)才是,人家都分析的很清晰了
渐行渐远888 2014-12-09
  • 打赏
  • 举报
回复
引用 15 楼 u011461314 的回复:
你这种结论,对目前的我来说,只有一句话: 什么乱七八糟的东西。
屁都不懂还来瞎闹!5楼才是真正大师!
别闹腰不好 2014-04-29
  • 打赏
  • 举报
回复
引用 10 楼 l676331991 的回复:
[quote=引用 9 楼 u012463264 的回复:] js中一就那么几种数据类型,根本就不包括Object 类型。 你是可以new Object 但是里边是什么也没有的 ,你还的自己定义属性。 其实就是你自己写的一种类型。
你明白LZ的问题在说什么么?js是弱类型的,所谓DuckType是也。这里所说的类型,不是typeof出来的值,而是借鉴了其他语言的概念,如果有var p = new Person(); 那么我们就说p是Person类型的,意思就是p是Person的实例。 。。。。。。 这是在讨论什么? 。。。。。。 按LZ提的问题,LZ会不知道js只有object number boolean function undefiend? js中全局下的Object这个标识量,本身就是一个对象,也是一个Constructor(Function的实例),不知道你们说Object不是一个构造器的是怎么理解js的,怎么理解构造器这个词的。Object都能用new关键字了,还在讨论什么? 敢不敢回归正题,讨论LZ的问题,解释解释js中是先有鸡还是先有蛋? [/quote] 你好像很NB的样子。。。。。。。。。。。
l676331991 2014-04-29
  • 打赏
  • 举报
回复
引用 9 楼 u012463264 的回复:
js中一就那么几种数据类型,根本就不包括Object 类型。 你是可以new Object 但是里边是什么也没有的 ,你还的自己定义属性。 其实就是你自己写的一种类型。
你明白LZ的问题在说什么么?js是弱类型的,所谓DuckType是也。这里所说的类型,不是typeof出来的值,而是借鉴了其他语言的概念,如果有var p = new Person(); 那么我们就说p是Person类型的,意思就是p是Person的实例。 。。。。。。 这是在讨论什么? 。。。。。。 按LZ提的问题,LZ会不知道js只有object number boolean function undefiend? js中全局下的Object这个标识量,本身就是一个对象,也是一个Constructor(Function的实例),不知道你们说Object不是一个构造器的是怎么理解js的,怎么理解构造器这个词的。Object都能用new关键字了,还在讨论什么? 敢不敢回归正题,讨论LZ的问题,解释解释js中是先有鸡还是先有蛋?
别闹腰不好 2014-04-29
  • 打赏
  • 举报
回复
引用 7 楼 l676331991 的回复:
[quote=引用 5 楼 u012463264 的回复:] Object 在js中是类型的意思 ,并没有Object 类型的构造方法 。
别闹了好么?var obj = new Object(); 这是啥?obj.constructor不是Object么?敢说Object不是构造器?
引用 6 楼 u011461314 的回复:
还有个function
function是关键字,不是对象,和if var return 是一个level的东东,和Function不是一路货哦。。。[/quote] js中一就那么几种数据类型,根本就不包括Object 类型。 你是可以new Object 但是里边是什么也没有的 ,你还的自己定义属性。 其实就是你自己写的一种类型。
l676331991 2014-04-29
  • 打赏
  • 举报
回复
伪代码大致是这样,create元操作的含义是使用给定的对象作为原型构造一个新的对象


var ObjectPrototype = create( );   // 开天辟地

var FunctionPrototype = create( ObjectPrototype );   
//FunctionPrototype(后被赋值给了Function.prototype)是Object类型的
//因为其原型是ObjectPrototype

var Function = create( FunctionPrototype );

Function.prototype = FunctionPrototype;
 // Function是Function类型的,也是Object类型的
//言外之意,Function对象 原型链上有Function.prototype和Object.prototype

Object =  create( FunctionPrototype ); 

Object.prototype = ObjectPrototype;
 //Object是Function类型的,也是Object类型的
//言外之意Object对象的原型链上有Function.prototype和Object.prototype
当然,在构造Function的时候远没有那么简单,这里只是简单解释了一下Object和Function之间错综复杂的关系。
zhjdg 2014-04-29
  • 打赏
  • 举报
回复
还有个object.
l676331991 2014-04-29
  • 打赏
  • 举报
回复
引用 5 楼 u012463264 的回复:
Object 在js中是类型的意思 ,并没有Object 类型的构造方法 。
别闹了好么?var obj = new Object(); 这是啥?obj.constructor不是Object么?敢说Object不是构造器?
引用 6 楼 u011461314 的回复:
还有个function
function是关键字,不是对象,和if var return 是一个level的东东,和Function不是一路货哦。。。
zhjdg 2014-04-29
  • 打赏
  • 举报
回复
还有个function
别闹腰不好 2014-04-29
  • 打赏
  • 举报
回复
Object 在js中是类型的意思 ,并没有Object 类型的构造方法 。
zhjdg 2014-04-29
  • 打赏
  • 举报
回复
你这种结论,对目前的我来说,只有一句话: 什么乱七八糟的东西。
XT是猛MAN 2014-04-29
  • 打赏
  • 举报
回复
结合这个http://kb.cnblogs.com/page/77480/,就可以很好理解了。谢了哈!
XT是猛MAN 2014-04-29
  • 打赏
  • 举报
回复
恩,l676331991确实牛,基本上解决了我的问题。我总结下,你看看对不对,就是js中先有Object.prototype,然后由他构造出Function.prototype,然后由Function.prototype构造出Object和Function(这时候两者表面上还没有鸡与蛋的关系),然后,把Object.prototype挂到Object上,Function.prototype挂到Function上,这样挂载好后,两者的关系也就形成了,也就形成了表面上鸡与蛋的关系。
zhjdg 2014-04-29
  • 打赏
  • 举报
回复
2中类型,在java和javascript中,都是两种类型。 楼主还在混乱中,
l676331991 2014-04-28
  • 打赏
  • 举报
回复
自盘古开天辟地,js中并不是就有了Object, 而是Object.prototype。 js中的万物(原始值除外)都是继承自Object,唯独一个对象例外,那就是Object.prototype。

Object  instanceof Object;  //true
Object.prototype  instanceof Object; // false
JS中没有类,当我们说一个变量是另一个变量的实例时,我们在说什么?(instanceof比较的是什么?) 借助Object.create我们有以下的栗子:

var p = {test:1}
var obj = Object.create(p)
function A(){}
obj instanceof A  //false
A.prototype = p
obj instanceof A  //true
当我们说一个对象继承自某个Constructor时,其实我们是在说,从这个对象的原型链上找到了Constructor.prototype. 所以,Object.prototype可以先于Object出现,然后用这个prototype构造出Function.prototype,有了Function.prototype再构造出Function,Object这几个构造器。 然后把Object.prototype挂到Object上,Function.prototype挂到Function上。 好比栗子中的obj构造自p,而obj构造出来之后,p才挂到A上,我们说obj是A类型的,但是obj是用A.prototype(就是p)构造出来的。 分析可得:全局下的Object 构造自 Function.prototype, Function.prototype构造自Object.prototype

Object.getPrototypeOf(Object) === Function.prototype   //全等哦
Object.getPrototypeOf(Function.prototype) === Object.prototype  //全等哦
所以,是先有的Object.prototype,再有的Function.prototype,再有的Function和Object。 个人愚见,仅供参考。
XT是猛MAN 2014-04-28
  • 打赏
  • 举报
回复
引用 1 楼 zzgzzg00 的回复:
Object是一个构造函数?
是的呀!
似梦飞花 2014-04-28
  • 打赏
  • 举报
回复
Object是一个构造函数?

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧