面向对象:不了解原理的情况下,会使用功能。如:电视机,不清楚原理,却知道如何操作。面向对象是一种通用的思想,并非只有在编程使用。面向对象编程简称OOP。

js是一个基于原型的面向对象的编程语言,即每个对象有一个原型对象,对象从原型中继承属性和方法。

js的原型的关系是递归的。即,对象的原型也是一个对象,而原型的本身可能还有一个原型。

js中的对象使用一个new 运算符和一个构造函数来创建

js中可以给对象动态的添加属性和方法

js中创建对象的方法有多种,包括:原型方式,动态原型方式,工厂方式等等

实现继承机制的方式有多种,包括:对象冒充,call(),apply(),原型链等等

 

多用原型来创建对象

prototype对象是个模板,要实例化的对象都以这个模板为基础,总而言之,prototype对象的任何属性和方法都被传递给那个类的所有实例。原型链利用这种功能来实现继承机制

 

 

//构造函数,用来产生对象

 

//定义一个对象

 

function People(name,age){

 

//属性

 

this.name = name;

 

this.age = age;

 

//一个方法

 

this.run = function(){

 

 

 

 

 

alert(this.name + "paopaoapo");

 

}

 

}

 

 

 

// People.prototype.qq="12345";//给People原型添加属性qq

 

// var p1=new People("小明",18);//存储的内存地址

 

// p1.age=25;

 

// var p2=new People("小明2",19);//p1、p2是两个不同对象 来自同一个原型

 

// p1.sex="男";

 

// alert(p1.name + " " + p1.age +" " + p1.sex+" "+p1.qq+" " +p2.name + " " + p2.age+" " + p2.sex+" "+p2.qq);

 

// p1.run();

 

// p2.run();

 

 

 

function Man(name,age){

 

this.fight="PK";

 

//调用父类的构造函数传参《不需要传参数就可以不用》

 

this.constructor(name,age);

 

//对象冒充法一

 

// this.inherit = People;//模拟继承 调用People函数

 

// this.inherit(name,age);//执行People

 

// delete this.inherit;//删除inherit属性

 

//对象冒充法二

 

// People.call(this,name,age);//this表示Man对象

 

//对象冒充法三

 

// People.apply(this,[name,age]);//this表示Man对象,和call不一样的是传参数方式

 

//

 

}

 

Man.prototype = new People();//Man的prototype<原型>为People 真实继承 原型链

 

 

 

var m1=new Man("大胖",56);

 

// m1.run();

 

console.log(m1);

 

// console.log(m1 instanceof Man);//对象冒充法一二三 真实继承为true

 

 

 

console.log(m1.constructor);

 

// 打出function People(name,age){

 

// //属性

 

// this.name = name;

 

// this.age = age;

 

// //一个方法

 

// this.run = function(){

 

// alert(this.name + "paopaoapo");

 

// }

 

// }

 

console.log(m1 instanceof People); //对象冒充法一二三为false 真实继承为true

 

// console.log(m1.__proto__.__proto__.__proto__.__proto__);//__proto__和prototype一样的

function Animal(name,age,color){

 

this.name = name;

 

this.age = age;

 

this.color = color;

 

}

 

function Dog(name,age,color){

 

this.dog = "狗狗";

 

this.constructor(name,age,color);

 

}

 

function Cat(name,age,color){

 

this.cat = "猫";

 

this.constructor(name,age,color);

 

}

 

Dog.prototype = new Animal();

 

Cat.prototype= new Animal();

 

 

 

var d1 = new Dog("狗小黄",2,"green");

 

var d2 = new Dog("狗小黄2",22,"green2");

 

console.log(d1);

 

console.log(d2);