标签:
原文来自http://www.cnblogs.com/wangfupeng1988/p/3977987.html
这是我非常感兴趣的东西,原型和闭包,当我看到标题后,我就迫不及待的点开了。今天我自己学习一下,顺便借花献佛,不理解的也可以再看一看。
"一切都是对象"这句话的终点在于如何去理解"对象"这个概念。所谓Object,其实是所有对象的祖宗,这句话不难理解,而值的类型不是对象。
首先咱们还是看一看JavaScript中一个常用的函数 - typeof()。
typeof()是判断数据类型的函数,输出后返回数据类型名称。、
用typeof()函数输出以下几种类型:
function show(){
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
javascript中的对象该如何定义?
JavaScript是弱类型语言,所以比较随意,数组是对象,函数是对象,对象还是对象,对象里面的一切都是属性,对象里的方法,也表示为一种属性。它的属性表示为键值对的形式。
而且JavaScript中的对象可以任意扩展属性,没有class的约束。
例:
var obj={
a:10,
b:function(x){
alert(this.a+x);
},
name:"xxx",
year:2015
}
这个例子中,obj是一个自定义对象,其中a,b,c就是它的属性,而且在c的属性值也事一个对象,它有name和year两个属性。
上面是一个比较好理解的例子,那么函数和数组也可以这样定义属性吗?
答案是不可以,但是它可以用另一种形式来定义,总之函数/数组、只要是对象,它就是属性的集合。接下来,我们用函数来做一个例子、
例:
var fn=function(){
alert(100);
};
fn.a=10;
fn.b=function(){
alert(123);
};
fn.c={
name:"xxx",
year:2015
};
这段代码中,函数就作为对象被赋值a、b、c三个属性--,这就是属性的集合
在jQuery源码中,"jQuery"或者"$",这个变量其实是一个函数,我们可以用typeof来验证。
console.log(typeof($));//function
console.log($.trim(" abc "));
这段代码的意思是在$或者jQuery函数上加了一个trim属性,属性值是函数,作用是截取前后空格。
JavaScript与java/c#相比,首先最需要解释的就是弱类型,应为弱类型是最基本的语法,而且最常用。其次要解释的就是文本的内容,一切(引用类型)都是对象,对象是属性的集合。最需要了解的就是对象的概念。
最后,在typeof的输出类型中,function和object都是对象,为何要输出两种答案?
因为:function是所有函数对象的祖宗,而object是所有对象的祖宗具体原因,明天跟着王福朋的课走!!!
深入理解javascript原型和闭包(1)--一切都是对象
标签:
原文地址:http://www.cnblogs.com/webljx/p/5059984.html