属性和方法的定义:
如果一个变量属于一个对象所有,那么该变量就可以称之为该对象的一个属性,属性一般是名词,用来描述事物的特征
如果一个函数属于一个对象所有,那么该函数就可以称之为该对象的一个方法,方法是动词,描述事物的行为和功能
new关键字:
构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运 算符一起使用在创建对象的语句中。
注意:
1、构造函数用于创建一类对象,首字母要大写
2、 构造函数要和new一起使用才有意义
new再执行时会做四件事
1、new会再内存中创建一个新的空对象
2、new会让this指向这个新的对象
3、执行构造函数,目的是为了给这个新对象加属性和方法
4、new会返回这个新对象。
this的指向问题:
1、函数再定义时this是不确定的,只有再调用的时候才可以确定
2、一般函数直接执行,内部this指向全局window(this在不同的场景下,指向是不同的)
<script>
function test(){
console.log(this);
}
test();
如果在上面函数直接输出this,那么this将直接指向window。
3、函数作为一个对象方法,被该对象所调用,那么this指向的是该对象
4、构造函数中的this其实是一个隐式对象、类似一个初始化的模型,所有方法和属性都挂载到这个隐式对象身上,后续通过new关键字来调用,从而实现实例化。
创建对象的方式:
1、对象字面量
var person_01={
name:['张麻子','黄四郎','夫人','马邦德'],
age:{
xu:23,
shi:22
},
saygoodbye:function(){
console.log(this.age.xu);//this表示当前这个对象,age就是一个对象
}
}
console.log(person_01.name);
person_01.saygoodbye();
//arr是一个数组,因为name获取的是数组
var arr=person_01.name;
2、new Object()创建对象
//通过objiect对象创建对象
var person=new Object();//new相当于一个创建,创建一个对象person
// console.log(person);
//给对象赋属性
person.name='张麻子';
person.age='23';
person.weight='177';
person.color='yellow'
//然后将对象输出
console.log(person);
3、工厂模式/函数创建对象
//在工厂模式创建对象:核心封装一个函数
function creatObject(name,age,sex,ID){
var person=new Object();
person.name=name;
person.age=age;
person.sex=sex;
person.ID=ID;//将该方法封装起来即可
return person;
}
creatObject('张麻子',23,'男','九筒')
console.log(person);
//通过工厂模式创建第二个对象
var person_02=creatObject('黄四郎','替身','胡万','团练教头')
console.log(person_02);
//工厂模式创建完成之后,根据模板创建对象即可,模板不需要再改变
3.1、工厂模式/函数创建方式的简写/简化(自定义构造函数)
//自定义构造函数,工厂模式简化版
//函数创建对象 function
function Map(width,height,position,color){
this.width=width;//=后面的值对应的是Map()内的值
this.height=height;
this.position=position;
this.color=color;
}
//new
//实例化对象(创建对象)
var map_01=new Map(200,300,'reght','red');//new Map()是调用上面封装好的函数,通过new关键字创建对象,()内为实参
console.log(map_01);
//第二中赋值方式
var map_02=new Map();
console.log(map_02);
map_02.width=300;
map_02.height=300;
map_02.position='left';
map_02.color='blue'
console.log(map_02);