面向对象
1.面向对象:是一种编程的思想,程序里用面向对象的方法描述现实世界中的一个具体的事物,
2.对象
2.1什么是对象?
封装了一个事物的属性和功能的程序结构,其属性可以包括基本值,对象或者函数。对象的行为相当于其方法,特征相当于其属性。
2.2对象的创建
2.11对象字面量:
var obj = {
属性名:属性值,
……
方法名:function(){
this.属性名,
this.方法名(),
}
……
}
Eg:var o = {
name: 'zs',
age: 18,
sex: true,
sayHi: function () {
console.log(this.name);
}
};
2.12 new Object()创建对象
var person = new Object();
person.name = 'lisit';
person.age = 35;
person.job = 'actor';
person.sayHi = function(){
console.log('Hello,everyBody');
2.13自定义构造函数
构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
- 构造函数用于创建一类对象,首字母要大写。
- 构造函数要和new一起使用才有意义。
function Student(sname,sage){
this.sname = sname;
this.sage = sage;
this.intr = function(){
console.log(`My name is ${this.sname},I'am ${this.sage}`);
}
}
var lilei = new Student("Li Lei",11);
var lihua = new Student("Li Hua",11);
console.dir(lilei);
lilei.intr();
console.dir(lihua);
lihua.intr();
new : 4件事:
// 1、创建新的空对象
// 2、用new创建子对象时,会自动设置子对象的__proto__继承构造函数的prototype
// 3、用新对象去调用构造函数
// new的功能将构造函数中的this指新对象
// 向新对象中添加构造函数规定的属性
// 将属性参数的值,保存到新对象的新属性中
// 向新对象添加构造 函数规定的方法
// 4、将新对象的地址保存在变量
JS this指向总结:
关键:哪个对象调用函数,函数里面的this指向哪个对象。
1、 普通函数调用
var username='cn'
function fn(){
alert(this.username);//cn
}
fu();
//---------------
window.username='cn'
function fn(){
alert(this.username);//cn
}
fn();
//可以理解为
//window.fn();
2、 对象函数调用
这个相信不难理解,就是那个函数调用,this指向哪里
window.b=2222
var obj={
a:111,
fn:function(){
alert(this.a);//111
alert(this.b);//undefined
}
}
- obj.fn();
很明显,第一次就是输出obj.a,就是111。而第二次,obj没有b这个属性,所以输出undefined,因为this指向obj。
但是下面这个情况得注意
var obj1={
a:222
};
var obj2={
a:111,
fn:function(){
alert(this.a);
}
}
- obj1.fn=obj2.fn;
- obj1.fn();//222
这个相信也不难理解,虽然obj1.fn是从obj2.fn赋值而来,但是调用函数的是obj1,所以this指向obj1
3、构造函数调用
var TestClass=function(){
this.name='111';
}
var subClass=new TestClass();
subClass.name='cn';
console.log(subClass.name);//cn
var subClass1=new TestClass();
console.log(subClass1.name)//111