关于js原型和继承的方法复习

来源:互联网 发布:asp开源cms 编辑:程序博客网 时间:2024/06/05 10:35

1.首先我们先来看几个概念。

封装:将描述同一个东西的属性和方法,定义在一个对象中。

继承:父对象中的属性和方法,子对象可以直接使用。

多态:同一个对象,在不同情况下,呈现不同的状态。

2.如何定义构造函数?

    function  构造函数名(参数...){

this.属性名=属性参数;

//此步骤表示在当前正在创建的对象中添加一个属性名,并且赋值

...

this.方法名=function(){

...this.属性名...

}

}

接下来是利用这个构造函数创建对象:

var obj=new  构造函数名(参数...)



3.js中一切继承都是利用原型对象实现的,

原型对象:每个函数都有一个原型对象,而构造函数的原型对象负责保存所有子对象共享的成员。

因此所有子对象共享的方法,都应该定义在构造函数的原型对象中。

4.我们来看几个方法。

(1).判断自有属性:obj.hasOwnProoerty("属性名")

(2).获得任意对象的父级原型对象:Object.getPropertyOf(子对象)

(3).判断一个prototype对象是否存在于另一个对象的原型链中:父对象.isPrototypeOf(子对象)   返回布尔值


5.例子,下面我们来看一个关于继承的例子,不多说,直接上代码,注释很清晰。

function flyer(fname,speed){    //定义了一个flyer构造函数    this.fname=fname;    this.speed=speed;    if(!flyer.prototype.fly){        flyer.prototype.fly=function(){            console.log(this.fname+""+this.speed+" 时速飞行")        }    }}var bird=new flyer("小鸟",40);      //实例化上面的构造函数,并且传入参数,注意用newbird.fly();                             //调用构造函数里面的fly方法function plane(fname,speed,capacity){   //定义一个函数plane    flyer.call(this,fname,capacity);     //调用构造函数的一瞬间更换参数对象    if(!flyer.prototype.isPrototypeOf(plane.prototype)){    //判断如果flyer的原型是plane的父原型,如果不是,就给他设置为他的父原型        Object.setPrototypeOf(plane.prototype,flyer.prototype);    }    this.capacity=capacity;             //定义自己的capacity属性    if((!plane.prototype.hasOwnProperty("fly"))){      //判断plane自己的原型中是否有fly方法,没有则进行设置自己的fly方法        plane.prototype.fly=function(){            console.log(this.fname+"搭载"+this.capacity+"名乘客以"+this.speed+"的速度飞行");        }    }}var A380=new plane("A380",1000,555);  //实例化plane方法A380.fly();     //调用plane里面的fly方法,如果自己的原型有则用自己的,否则会用flyer构造函数里面的


原创粉丝点击