面向对象

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运算符一起使用在创建对象的语句中。

  1. 构造函数用于创建一类对象,首字母要大写。
  2. 构造函数要和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

原文地址:https://www.cnblogs.com/yqycr7/p/11334898.html