1.this
2.使用工厂方法创建对象
批量创建对象
function createPerson(name,age,gender){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.gender=gender;
obj.sayName=function(){
alert(this.name);
}
return obj;
}
var obj1=createPerson("Lisa",18,"woman");
var obj2=createPerson("Rose",19,"woman");
var obj3=createPerson("Jisoo",20,"woman");
var obj4=createPerson("Jenny",21,"woman");
console.log(obj1);
console.log(obj2);
console.log(obj3);
console.log(obj4);
3.构造函数
1)使用工厂法创建的对象,使用的构造函数都是Object,所以创建的对象都是Object这个类型,就导致无法区分出多种不同的类型对象
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.sayName=function(){
alert(this.name);
}
}
var per=new Person("Rose",18,"woman");
console.log(per instanceof Person);
console.log(per instanceof Object);
2)使用 istanceof 可以检查一个对象是否是一个类的实例
语法:
对象 istanceof 构造函数
如果是,则返回 true,否则返回false
所有的对象都是Object的后代
所以任何对象和Object 在instanceof 检查时都会返回true
3)this的情况
1.当以函数的形式调用时,this是window
2.当以方法的形式调用时,谁调用方法this就是谁
3.当以构造函数的形式调用时,this就是新创建的那个对象
4.构造函数的修改
将sayName方法在全局作用域中定义
function Person(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
this.sayName=fun;
}
function fun(){
alert("My name is "+this.name);
};
var per=new Person("Rose",18,"woman");
var per2=new Person("Rose7",18,"woman");
per.sayName();
per2.sayName();
console.log(per.sayName==per2.sayName);
5.原型对象
Person.prototype.sayName=function(){
alert("My name is "+this.name);
}
var per=new Person("Rose",18,"woman");
var per2=new Person("Rose1",18,"woman");
per.sayName();
per2.sayName();
2)使用 in 检查对象中是否含有莫格属性时,如果对象中没有但原型中有,也会返回true
可以使用对象的hasOwnProperty( ) 来检查自身中是否含有该属性
使用该方法只有当对象自身中含有该属性时,才会返回true
6.toString( )
当我们直接在页面中打印一个对象时,事实上输出的对象是toString( ) 方法的返回值
如果希望在输出对象时不输出[Object Object],可以为对象添加一个toString( )方法
Person.prototype.toString=function(){
return this.name+" "+this.age+" "+this.gender;
};
7.垃圾回收
var obj=new Object();
obj=null;
8.数组简介
2)使用typeof 检查一个数组时,会返回object
3)向数组中添加元素
语法:
数组[索引]=值
4)读取数组中的元素
语法:数组[索引]
如果读取不存在的索引,它不会报错而是返回undefined
5)获取数组的长度
对于连续的数组,使用length可以获取到数组的长度(元素的个数)
对于非连续的数组,使用length会获取到数组最大的索引+1
尽量不要创建非连续的数组
修改length
如果修改的length大于原长度,则多出的部分会空出来
如果修改的length小于原长度,则多出的元素会被删除
6)向数组的最后一个元素添加元素
语法:数组[数组.length]=值
var arr=new Array();
arr[0]=1;
arr[1]=2;
arr[2]=3;
arr[3]=4;
console.log(arr[1]);
console.log(arr.length);
arr.length=10;
console.log(arr);
arr[arr.length]=80;
console.log(arr);
9.数组字面量
1)使用字面量来创建数组
语法:[ ]
var arr=[];
2)使用字面量创建数组时,可以在创建时就指定数组中的元素
var arr=[1,2,3,4,5,10];
3)使用构造函数创建数组时,也可以同时添加元素,将要添加的元素作为构造函数的参数传递
元素之间使用 , 隔开
var arr2=new Array(10,20,30);
4)创建一个数组中只有一个元素10
arr=[10];
5)创建一个长度为10的数组
arr2=new Array(10);
6)数组中的元素可以是任何的数据类型,可以是对象也可以是函数
7)数组中也可以放数组(二维数组)
10.数组的四个方法
1)push( )
该方法可以向数组的末尾添加一个或多个元素,并返回数组新的长度
可以将要添加的元素作为方法的参数传递,这样这些元素将会自动添加到数组的末尾
该方法会将数组新的长度作为返回值返回
var arr=["one","two","three"];
var result=arr.push("four","five");
console.log(arr);
console.log(result);
2)pop( )
该方法可以删除数组的最后一个元素,并将被删除的元素作为返回值返回
var arr=["one","two","three"];
arr.push("four","five");
var result=arr.pop();
console.log(arr);
console.log(result);
3)unshift( )
向数组开头添加一个或多个元素,并返回新的数组长度
向前边插入元素后,其他元素的索引会依次调整
var arr=["one","two","three"];
arr.push("four","five");
var result=arr.unshift("zero");
console.log(arr);
console.log(result);
4)shift( )
可以删除数组的第一个元素,并将被删除的元素作为返回值返回
var arr=["one","two","three"];
arr.push("four","five");
var result=arr.shift("one");
console.log(arr);
console.log(result);