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