1.1 对象的创建
创建一个对象,有两种方法,第一种比较简单,叫做字面量;第二种是用new Object()。
1.1.1 字面量的创建方式
1 var obj = {
2 name : "树懒",
3 age : 18,
4 gender: "男"
5 };
6
7 console.log(obj);
8 console.log(obj.name);
9 console.log(typeof obj);
{}就是对象的界定符,就是对象的字面量。对象有属性,所谓的属性就是这个对象的特点、特性,name、age、gender都是这个obj对象的属性(preperty)。
什么是对象?对象就是属性的无序集合。
------------------------------------------------------------------------
公式:
1{
2 k : v,
3 k : v,
4 k : v,
5 k : v
6}
JSON和对象字面量的区别:
之前学习过JSON,JSON要求所有的k必须加引号,而对象字面量不需要加引号,当然加引号也不错。
JSON = JavaScript Object Notation,JS对象表示法。JSON是一个用于交换的格式,所以JSON不仅仅JavaScript用,后台语言比如PHP、Java、ASP等等都要识别JSON,为了最大的兼容,k必须加引号。也就是说,JSON里面的k加引号,不是因为JS,而是因为后台的那些语言。
JSON要比对象字面量,要严格,严格在哪儿呢?就是所有的k,必须加引号。
JSON:
1{
2 "k" : v,
3 "k" : v,
4 "k" : v,
5 "k" : v
}
-----------------------------------------------------
1.1.2 new Object()创建对象
1var obj = new Object(); //这是一个空对象,里面没有任何属性
2obj.name = "树懒";
3obj.age = 18;
4obj.gender = "男";
5
6console.log(obj);
7console.log(obj.age);
8console.log(typeof obj);
new是一个运算符,你没有看错,和+-*/一样是一个运算符。表示新创建一个对象。一会儿我们学习构造函数,实际上你将了解到new是一个函数调用的方式。Object()大写字母O,这是一个系统内置的构造函数,什么是构造函数,我们稍后讲到。
下面就可以用obj.k = v ;来追加属性了:
二、对象的方法
当一个对象的属性的值,是一个函数,那么这个函数我们就称为对象的“方法”(method)。
1var xiaoming = {
2 name : "小明",
3 age : 18,
4 gender : "男",
5 sayHello : function(){
6 alert("你好,我是" + this.name);
7 alert("今年" + this.age + "岁了");
8 alert("我是可爱的小" + this.gender + "生");
9 }
10 }
11
xiaoming.sayHello();
比如上面的案例,sayHello就是一个属性,只不过它的值是一个函数,所以我们就可以说xiaoming这个对象,有sayHello方法。
一个对象,方法函数里面的this指的是这个对象。
对象的方法的哲学,就是操作自己的属性。如果一个对象的方法,不操作自己的属性,那干嘛还要是方法呢?
zhangda方法,就是让自己的age++:
三、构造函数
JavaScript规定,一个函数可以用new关键字来调用。那么此时将按顺序发生四件事情:
1)隐秘的创建一个新的空对象
2)将这个函数里面的this绑定到刚才创建隐秘新对象上
3)执行函数体里面的语句
4)返回这个新的对象
1 function People(){
2 this.name = "小明";
3 this.age = 18;
4 this.gender = "男";
5 }
6 var xiaoming = new People();
函数的新的调用方式:使用new关键字来调用。
此时很有意思,函数不仅仅能够执行,还能返回出来一个对象。也就是说,对象是函数“生”出来的,对象是函数“new”出来的。
我们称呼这个函数,叫做构造函数,一般的,构造函数用大写字母开头。也叫作People“类”。
我们称呼xiaoming这个对象是People类的实例。
四、原型prototype----------用于构造函数
4.1 原型的定义
我们先来看一个事儿:
1 function fun(){
2 alert("你好");
3 }
4
5 console.log(fun.prototype);
6 console.log(typeof fun.prototype);
在JavaScript中,任何一个函数,都有一个prototype属性,指向一个对象。我们输出了一个函数的prototype属性,你会发现是一个空对象。输出这个prototype的类型,发现是object类型。
prototype就是英语“原型”的意思。每个函数都有原型,原型是一个对象。
一个函数的原型,对于普通函数来说,没用。但是如果函数是一个构造函数,那么函数的原型,用处极大