深入理解javascript原型和闭包(1)---一切都是对象

type函数输出的类型,在此列出:

function show (x){
console.log(typeof(x));//undefined
console.log(typeof(10));//number
console.log(typeof('abc'));//string
console.log(typeof(true)); //boolean console.log(typeof(function () {}));//function console.log(typeof([1,'a',true]));//object
console.log(typeof({a:10 ,b:20}));//object
console.log(typeof(null));//object
console.log(typeof(new Number(10)));//object
}
show();

以上代码列出了typeof输出的集中类型标识,其中上面的四种(undefined,number,string,boolean)属于简单的值类型,不是对象。剩下的几种情况--函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型

判断一个变量是不是对象非常简单,值类型的类型判断用typeof,引用类型的类型判断用instanceof。

var fn=function(){};
console.log(fn instanceof Object);//true

对象若--若干属性的集合

java或者C#中的对象都是new一个class出来,而且里面有字段、属性、方法。规定的非常严格。但是javascript就比较随意了---数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,没有方法。那么这样如何表示呢?--方法也是一种属性。因为它的属性表示为键值对的形式。

而且更加好玩的事,javascript中的对象可以任意的扩展属性,没有class的约束。

先说个最常见的例子:

var obj={
a:10,
b:function(x){
alert(this.a+x);
}
c:{
name:'王',
year:1988
}
};

以上代码中,obj是一个自定义的对象,其中a,b,c就是它的属性,而且在c的属性值还是一个对象,它又有name 、year两个属性。

那么函数和数组也可以这样定义属性吗?---当然不行,但是它可以用另外一种形式,总之函数/数组之流,只要是对象,它就是属性的集合。

以函数为例子:

	var fn=function(){
alert(100);
};
fn.a=10;
fn.b=function(){
alert(123);
};
fn.c={
name:'王',
year:1988
};

上段代码中,函数就作为对象被赋值了a、b、c三个属性——很明显,这就是属性的集合吗。

你问:这个有用吗?

回答:可以看看jQuery源码!

在jQuery源码中,“jQuery”或者“$”,这个变量其实是一个函数,不信你可以叫咱们的老朋友typeof验证一下。

console.log(typeof($));//function
console.log($.trim("ABC"));

验明正身!的确是个函数。

很明显,这就是在$或者jQurey函数上加了一个trim属性,属性值是函数,作用是截取前后空格。

javascript与java/C#相比,首先最需要解释的就是弱类型,因为弱类型是最基本的用法,而且最常用,就不打算做一节来讲。

其次要解释的就是本文的内容---一切(引用类型)都是对象,对象是属性的集合。最需要了解的就是对象的概念,和java/C#完全不一样。所以,切记切记!

最后,在typeof的输出类型中,function和object都是对象,为何要输出两种答案,都叫做object不行吗,当然不行。

引用自深入理解javascript原型和闭包(1)——一切都是对象

深入理解javascript原型和闭包(1)---一切都是对象的更多相关文章

  1. 深入理解javascript原型和闭包 (转)

    该教程绕开了javascript的一些基本的语法知识,直接讲解javascript中最难理解的两个部分,也是和其他主流面向对象语言区别最大的两个部分--原型和闭包,当然,肯定少不了原型链和作用域链.帮 ...

  2. 深入理解javascript原型和闭包系列

    从下面目录中可以看到,本系列有16篇文章,外加两篇后补的,一共18篇文章.写了半个月,从9月17号开始写的.每篇文章更新时,读者的反馈还是可以的,虽然不至于上头条,但是也算是中规中矩,有看的人,也有评 ...

  3. 深入理解javascript原型和闭包(1)——一切都是对象

    “一切都是对象”这句话的重点在于如何去理解“对象”这个概念. ——当然,也不是所有的都是对象,值类型就不是对象. 首先咱们还是先看看javascript中一个常用的函数——typeof().typeo ...

  4. 深入理解javascript原型和闭包(2)——函数和对象的关系

    上文(理解javascript原型和作用域系列(1)——一切都是对象)已经提到,函数就是对象的一种,因为通过instanceof函数可以判断. var fn = function () { }; co ...

  5. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  6. 深入理解javascript原型和闭包(4)——隐式原型

    注意:本文不是javascript基础教程,如果你没有接触过原型的基本知识,应该先去了解一下,推荐看<javascript高级程序设计(第三版)>第6章:面向对象的程序设计. 上节已经提到 ...

  7. 深入理解javascript原型和闭包(5)——instanceof

    又介绍一个老朋友——instanceof. 对于值类型,你可以通过typeof判断,string/number/boolean都很清楚,但是typeof在判断到引用类型的时候,返回值只有object/ ...

  8. 深入理解javascript原型和闭包(6)——继承

    为何用“继承”为标题,而不用“原型链”? 原型链如果解释清楚了很容易理解,不会与常用的java/C#产生混淆.而“继承”确实常用面向对象语言中最基本的概念,但是java中的继承与javascript中 ...

  9. 深入理解javascript原型和闭包(7)——原型的灵活性

    在Java和C#中,你可以简单的理解class是一个模子,对象就是被这个模子压出来的一批一批月饼(中秋节刚过完).压个啥样,就得是个啥样,不能随便动,动一动就坏了. 而在javascript中,就没有 ...

  10. 深入理解javascript原型和闭包(8)——简述【执行上下文】上

    什么是“执行上下文”(也叫做“执行上下文环境”)?暂且不下定义,先看一段代码: 第一句报错,a未定义,很正常.第二句.第三句输出都是undefined,说明浏览器在执行console.log(a)时, ...

随机推荐

  1. UWP 禁止Pivot swip 手势

    以前想要禁止内置的手势动作,看了一下网上是设置 IsLocked="True". 但是拿到UWP上来,靠,设置了之后header只显示当前的那个header.这样的设计真是丑爆了. ...

  2. getFields()和getDeclaredFields()的区别

    getFields()获得某个类的所有的公共(public)的字段,包括父类. getDeclaredFields()获得某个类的所有申明的字段,即包括public.private和proteced, ...

  3. IDF实验室:牛刀小试

    被改错的密码[从格式和长度来推测出是MD5] 迷醉..人生第一道ctf题?据说是因为看起来像是MD5加密的格式,但是数了一下发现有33个字符,就推测???熊孩子多敲了一位进去.从32个变33个了,然后 ...

  4. 试听笔记:javascript入门精通

    一.数据类型 1.原始类型:number.string.boolean.null.undefined 2.对象类型:Object (Function.Array.Date...) P.类型隐式转换:' ...

  5. Nginx二级域名及多Server反向代理配置

    Nginx强大的正则表达式支持,可以使server_name的配置变得很灵活,如果你要做多用户博客,那么每个用户拥有自己的二级域名也就很容易实现了. 注:nginx反向代理同一ip多个域名,给head ...

  6. LINQ绑定List到GridView

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  7. Ext3文件系统及JDB介绍

    Ext3介绍 对于ext3文件系统,磁盘空间划分一系列block groups,每个group有位图来跟踪inode和data块的分配和范围.其物理布局如下: Superblock:位于group内第 ...

  8. pod 安装总结

    参考http://code4app.com/article/cocoapods-install-usage http://www.jianshu.com/p/32d9cfb91471 原文:http: ...

  9. 利用轮播原理结合hammer.js实现简洁的滑屏功能

    最近有个任务,做一个非常小的h5的应用,只有2屏,需要做横向的全屏滑动切换和一些简单的动画效果,之前做这种东西用的是fullpage.js和jquery,性能不是很好,于是就想自己动手弄一个简单的东西 ...

  10. *HDU1800字典树

    Flying to the Mars Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...