d>“面向对象编程”(Object Oriented Programming,缩写为OOP)是目前主流的编程范式。面向对象最重要的三大特征是封装、继承和多态。
一 封装
一个对象提供一些公有的方法和属性供外部使用(接口),一些私有的属性和方法供对象本身调用。封装是模块化的基石,还避免了命名冲突的问题。
上面例子中function A的是从外面可以任意访问的,没有做好封装。
封装形式
var _config是个局部变量,然后给A增加了一个getConfig方法。既保证了外部可以访问到_config属性,又可以保证_config不会被外部任意改写。因为一般来说,每一个子类的属性都是私有的。
下面定义在prototype上的方法可以被外部访问,原型对象上的所有属性和方法,都能被派生对象共享。但原型对象的属性不是实例对象自身的属性。只要修改原型对象,变动就立刻会体现在所有实例对象上。
二 继承
- 类继承:JS中其实是没有类的概念的,所谓的类也是模拟出来的。类式继承是在函数对象内调用父类的构造函数,使得自身获得父类的方法和属性。call和apply方法为类式继承提供了支持。通过改变this的作用环境,使得子类本身具有父类的各种属性。
var father = function() {
this.age = 52;
this.say = function() {
alert('hello i am '+ this.name ' and i am '+this.age + 'years old');
}
}
var child = function() {
this.name = 'bill';
father.call(this);//使用call继承father的属性和方法
}
var man = new child();
man.say();
-
原型继承是JavaScript中固有的
原型继承 - 组合模式:用类式继承属性,而原型继承方法。这种模式避免了属性的公用,因为一般来说,每一个子类的属性都是私有的,而方法得到了统一。这种模式称为组合模式,也是继承类式常用到的一种方法。
function father() {
this.a = 'father'
}
father.prototype.b = function() {
alert(this.a)
}
var child = function() {
father.call(this)
}
child.prototype = new father();
网友评论