深入理解javascript原型和闭包(1)——万物皆对象
2017-11-16 10:58
573 查看
function show(x) {
(undefined, number, string, boolean)属于简单的值类型,不是对象。剩下的几种情况——函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。
判断一个变量是不是对象非常简单。值类型的类型判断用typeof,引用类型的类型判断用instanceof。
var fn = function () { };
console.log(fn instanceof Object); // true
javascript的对象比较随意——数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。那么这样方法如何表示呢?——方法也是一种属性。因为它的属性表示为键值对的形式。
而且,更加好玩的事,javascript中的对象可以任意的扩展属性,没有class的约束。这个大家应该都知道,就不再强调了。
先说个最常见的例子:
var obj = {
a:17,
b:function(x){
alert(this.a+x);
},
c:{
name:’小明’,
year:1991
}
};
以上代码中,obj是一个自定义的对象,其中a、b、c就是它的属性,而且在c的属性值还是一个对象,它又有name、year两个属性。
函数和数组也可以这样定义属性吗?——当然不行,但是它可以用另一种形式,总之函数/数组之流,只要是对象,它就是属性的集合。
以函数为例子:
var fn = function () {
alert(100);
};
fn.a = 10;
fn.b = function () {
alert(123);
};
fn.c = {
name: “小明”,
year: 1991
};
上段代码中,函数就作为对象被赋值了a、b、c三个属性——这就是属性的集合。
在jQuery源码中,“jQuery”或者“$”,这个变量其实是一个函数,可以用typeof验证一下。
console.log(typeof );//functionconsole.log(.trim(” ABC “));
常用的 .trim()也是个函数,<
4000
span style="font-family: STIXGeneral, "Arial Unicode MS", serif; font-size: 80%; font-style: normal; font-weight: normal;">很明显,这就是在或者jQuery函数上加了一个trim属性,属性值是函数,作用是截取前后空格。
javascript与java/C#相比,首先最需要解释的就是弱类型,其次要解释的就是本文的内容——一切(引用类型)都是对象,对象是属性的集合。最需要了解的就是对象的概念,和java/C#完全不一样。
在typeof的输出类型中,function和object都是对象,为何却要输出两种答案呢?都叫做object不行吗?——当然不行。
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();
(undefined, number, string, boolean)属于简单的值类型,不是对象。剩下的几种情况——函数、数组、对象、null、new Number(10)都是对象。他们都是引用类型。
判断一个变量是不是对象非常简单。值类型的类型判断用typeof,引用类型的类型判断用instanceof。
var fn = function () { };
console.log(fn instanceof Object); // true
javascript的对象比较随意——数组是对象,函数是对象,对象还是对象。对象里面的一切都是属性,只有属性,没有方法。那么这样方法如何表示呢?——方法也是一种属性。因为它的属性表示为键值对的形式。
而且,更加好玩的事,javascript中的对象可以任意的扩展属性,没有class的约束。这个大家应该都知道,就不再强调了。
先说个最常见的例子:
var obj = {
a:17,
b:function(x){
alert(this.a+x);
},
c:{
name:’小明’,
year:1991
}
};
以上代码中,obj是一个自定义的对象,其中a、b、c就是它的属性,而且在c的属性值还是一个对象,它又有name、year两个属性。
函数和数组也可以这样定义属性吗?——当然不行,但是它可以用另一种形式,总之函数/数组之流,只要是对象,它就是属性的集合。
以函数为例子:
var fn = function () {
alert(100);
};
fn.a = 10;
fn.b = function () {
alert(123);
};
fn.c = {
name: “小明”,
year: 1991
};
上段代码中,函数就作为对象被赋值了a、b、c三个属性——这就是属性的集合。
在jQuery源码中,“jQuery”或者“$”,这个变量其实是一个函数,可以用typeof验证一下。
console.log(typeof );//functionconsole.log(.trim(” ABC “));
常用的 .trim()也是个函数,<
4000
span style="font-family: STIXGeneral, "Arial Unicode MS", serif; font-size: 80%; font-style: normal; font-weight: normal;">很明显,这就是在或者jQuery函数上加了一个trim属性,属性值是函数,作用是截取前后空格。
javascript与java/C#相比,首先最需要解释的就是弱类型,其次要解释的就是本文的内容——一切(引用类型)都是对象,对象是属性的集合。最需要了解的就是对象的概念,和java/C#完全不一样。
在typeof的输出类型中,function和object都是对象,为何却要输出两种答案呢?都叫做object不行吗?——当然不行。
相关文章推荐
- 深入理解javascript原型和闭包(1)——一切都是对象
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(1)——一切都是对象
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(1)——一切都是对象
- 深入理解javascript原型和闭包(1)——一切都是对象
- 深入理解javaScript原型和闭包(1)--- 一切都是对象
- 深入理解javascript原型和闭包(1)——一切都是对象
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(1)-->一切都是对象
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(1)——一切都是对象
- 深入理解javascript原型和闭包(2)--函数和对象的关系
- 深入理解javascript原型和闭包系列 深入理解javascript原型和闭包(1)——一切都是对象