js之js一切为对象

经常听见大牛说js最大的优点和资本就是js一切皆为对象;虽然有时候也吹牛逼似得说出来了,但是其实真正并没有感受到这种魅力所在,今天研究了一下,就随便写写心得。

参考:http://www.2cto.com/kf/201507/421288.html

JavaScript的一切都是对象或者可以看成对象(实质)

带有属性和方法的特殊数据类型,而每个属性或者方法又可看做是一个键值对,因此可以这样定义:对象是一系列无序键值对的集合

因此可以这么理解,只要变量拥有这样的键值对,则可以把它当做是键值对。而只要是对象,就继承于Object对象的prototype属性;
这么来看,js中所有这些类型的创建与定义都是源于Object了;
参考的网址中有具体的例子,js最基本的类型中其都有其对应的方法,如var a =”cc”;a就拥有a.length()方法,所以string类型的变量就可以当做是对象。其它基本类型也一样。

主要还是得理解function是否是一个对象?

主要是先得理解Function和function的区别:

注意:官方定义: 在Javascript中,每一个函数实际上都是一个函数对象.
我们先来看最简单的两个代码,也是最容易理解的.

function fn(){}
var obj = {}
console.log(fn instanceof Function)//true
console.log(obj instanceof Object)//true
console.log(fn instanceof Object)//true
console.log(obj instanceof Function)//false

前面两个打印的效果,大家都容易理解.后面 fn instanceof Object 是为true.
这里也是一样,从函数的定义来说: 在javascript中一切函数实际都是函数对象.
所以为true就不奇怪了.obj instanceof Function 为false,当然不奇怪了.因为他是一个对象,不是函数.
我们再来看一个代码

console.log(Function instanceof Object); // true
console.log(Object instanceof Function); // true

代码很简单.运行结构两个都是为true,为什么呢? 第一个用函数的定义来说,(javascript中函数实际也是一个函数对象),当然为true,那第二个呢?对象也是函数?
Object也是函数.因为Object的结构是function Object(){native code}.
这种形式,很清晰的就是声明的一个Object函数,当然就是函数了,所以两个都是为true.
他们两个Function和Object函数实现代码,那当然是不一样了.他们是怎么实现的,那我们就不去详细琢磨了,如果想琢磨的,就可以了解浏览器的相关知识了.
理解一下:为什么object要是function Object(){native code}.这种形式呢,个人感觉应该是object是从null由来的,而且需要原型链的概念,而原型链的最终思想是通过函数来由上往下来传递的;它创造自己的构造函数,因为它为这种形式也是方面创造实例;new Object();
上面这种理解是有瑕疵的;这是属于一种必须的创造方法,有函数往下传递子孙,所以函数为什么存在的原因;
或许可以这么理解:函数function是上帝,上帝自己本身先建了一系列的属性,上帝按照自己的属性先创造了NULL对象(即用new function()方法),然后NULL对象有了创造儿子的能力(即通过原型prototype来传递),生了一系列的对象(儿子和孙子);
所以new function()和new Object()都可以使用来创造一个对象的原因就大概如此吧;(两者之间并不冲突)

附:jquey创建对象的原理:http://www.cnblogs.com/libin-1/p/6178003.html
函数Function的操作方法:http://www.cnblogs.com/pingchuanxin/p/5722139.html
function还是对象早:https://segmentfault.com/q/1010000006232708?_ea=1057062

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值