您的位置:首页 > Web前端 > JavaScript

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

2017-09-02 20:18 591 查看
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);      //实例化上面的构造函数,并且传入参数,注意用new
bird.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构造函数里面的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: