这是我参与8月更文挑战的第14天,活动详情查看:8月更文挑战
前言
吃饱饭才有力气写代码~
昨天我们把基本数据类型 String Number Boolean Null Undefined 的定义以及使用方法基本上总结了一下。对于引用数据类型 Object Array 以及 Function 只是简单写了定义。今天就接着来学这一部分。
一.JavaScript 对象
1.1 定义
JavaScript 对象是拥有属性和方法的数据。生活中的对象,属性和方法:
例如:一辆汽车是一个对象,对象有它的属性如重量、颜色等,方法有启动、停止等。所有的汽车都有这些属性,只是每款车的属性不完全相同;所有汽车也都有这些方法,但是它们被执行的时间不完全相同;
JavaScript 中几乎所有的事物都是对象。 字符串、数值、数组、函数......此外,JavaScript 允许自定义对象。
比如:给一个变量赋值;
var car = "Fute";
对象也是一个变量,但对象可以包含多个值(多个变量),每个值以 name:value 对呈现。
var car = {name:"Fute", modal:500,color:"white"};
在这个实例中,三个值("Fute",500,"white")赋予变量car。
1.2 对象属性
JavaScript 对象是变量的容器。 但是我们通常认为 "Javascript" 对象是键值对的容器。键值对通常写法为 name : value (键与值以冒号分割)。 键值对在 JavaScript 对象中通常称为 对象属性。 访问对象属性的方法:
- car.name;
- car["name"];
1.3 对象方法
//定义一个方法
methodName : function() {
// 代码
}
//访问对象方法
objectName.methodName()
二.进阶
2.1 JavaScript内建对象
- 布尔型可以是一个对象。
- 数字型可以是一个对象。
- 字符串也可以是一个对象
- 日期是一个对象
- 数学和正则表达式也是对象
- 数组是一个对象
- 甚至函数也可以是对象 对象只是带有属性和方法的特殊数据类型。
2.2 创建 Object 对象
2.2 1 使用Object定义并创建对象
在 JavaScript 中,几乎所有的对象都是 Object 类型的实例,它们都会从 Object.prototype 继承属性和方法。
Object 构造函数创建一个对象包装器。
Object 构造函数,会根据给定的参数创建对象。
语法格式:
new Object([value])
value 可以是任何值。
- 如果给定是 null 或者 undefined,将会创建并返回一个空对象
- 如果传进去的是一个基本类型的变量,则会构造其包装类型的对象
- 如果传进去的是引用类型的值,仍然会返回这个值,经他们复制的变量保有和源对象相同的引用地址。
- 当以非构造函数形式被调用时,Object 的行为等同于 new Object()。
var o = new Object(true);
//等价于 o = new Boolean(true);
//创建了一个对象的新实例并向其添加了四个属性
person=new Object();
person.firstname="John";
person.lastname="Doe";
person.age=50;
person.eyecolor="blue";
//也可以使用对象字面量来创建对象
person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};
2.2 2 使用函数来定义对象,然后创建新的对象实例
使用函数来构造对象:
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
}
this通常指向的是我们正在执行的函数本身,或者是指向该函数所属的对象。
一旦有了对象构造器,就可以创建新的对象实例:var myFather=new person("John","Doe",50,"blue");
var myMother=new person("Sally","Rally",48,"green");
2.3 给JavaScript 对象添加属性
- 可以通过为对象赋值,向已有对象添加新属性
person.firstname="John";
person.lastname="Doe";
person.age=30;
person.eyecolor="blue";
2.4 给JavaScript 对象添加方法
方法只不过是附加在对象上的函数。可以在构造器函数内部定义对象的方法。
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName;
function changeName(name)
{
this.lastname=name;
}
}
2.5 JavaScript for...in 循环
JavaScript 用 for... in 来循环遍历对象的属性。 例如:
var person={fname:"John",lname:"Doe",age:25};
for (x in person)
{
txt=txt + person[x];
}//JognDeo25
2.6 JavaScript 对象可变
对象是可变的,但是不会创建副本,而是通过引用来传递的。
而且改动其中一个的属性,其他对象的相应属性也会变化。
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"}
var x = person;
x.age = 10; // x.age 和 person.age 都会改变
三. new 和 不new
- 如果 new 了函数内的 this 会指向当前这个 person 并且就算函数内部不 return 也会返回一个对象。
- 如果不 new 的话函数内的 this 指向的是 window。
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
return [this.firstname,this.lastname,this.age,this.eyecolor,this]
}
var myFather=new person("John","Doe",50,"blue");
var myMother=person("Sally","Rally",48,"green");
console.log(myFather) // this 输出一个 person 对象
console.log(myMother) // this 输出 window 对象