JavaScript三大特性,继承封装多态

来源:互联网 发布:windows任务管理器进程 编辑:程序博客网 时间:2024/05/17 13:10

javascript的相关特性

一.、面向对象的三大特性:继承封装多态

作为基于对象的语言,js自然可以实现OOP语言的大部分特征。

继承:js没有类的概念,自然不能像php那样封装class然后继承最后new对象。但是js的继承却有更多的方式。在此讨论最常用的,也就是基于原型对象原型链继承。在js中,函数对象就相当于类,在函数对象中有一个prototype属性指向了函数对象的原型对象。在函数对象上创建对象,此对象中有一个proto的属性,也指向原型对象,那么此属性有什么作用呢?在对象调用属性或者方法时,先在实例中查找,如果找不到,则会去proto指向的原型对象中查找,这就叫做原型链,在此特别提出,原型对象中的方法和属性是所有实例公用的。基于此种特性,可将其实例B重写给函数A的原型对象,那么实例A在使用方法时,先在实例中寻找,如果没找到,则在原型对象也就是实例B中查找,如果还找不到,则会沿着实例B中的proto寻找函数B的原型对象,原型链即形成。

封装:所谓封装的概念,是不希望暴露函数中属性或者方法的地址,使外界不能操作,但是可以暴露特有的公有接口,可以利用接口操作,js的函数对象中也有私有和公有的概念,当然就有封装这个概念了。下面举例,在此栗子中,name属性就被封装起来,只能通过公有的接口来访问。

function A(){

var name='xiaoming';

this.getname=function(){

return name;

}

}

多态:弱数据类型中都是没有多态的,或者说都天然支持多态,多态又分类的多态,方法的多态,变量的多态。可以解释为一种类、方法、变量的多种状态

首先说类的多态:拿java举栗子,如果在A类实例化出的对象接受一个对象引用,那么需要在构造方法中指明接受对象的类名,为了更多的接受不同类对应的对象,

就会将不同的类抽象出一个父类,然后将父类写在构造函数中,这样就可以接受不同类的对象了,这就叫做类的多态,一个父类的不同状态。其实多态的前提是因为存在这样的限制,弱数据

类型没有这样的限制,那么也就不存在多态这个说法了,或者说天然多态

class A(类名 引用){

}

方法的多态:不同类中可以用相同的方法,意为一个方法的不同状态,js当然可以做到

变量的多态:弱数据类型不用指定类型,当然就是多态的。

0 0
原创粉丝点击