js面向对象的三大特性

0x00:使用OOP技术,常常要使用许多的代码模块,每个模块都提供特定的功能,每个模块老师孤立的,甚至与其它的模块完全独立,这种模块化的编程方法大大的提供了代码实现的多样性,大大增加了代码的重用性。js并不是直接的oop语言,但是可以通过模拟的方式做到其它很多oop语言才能做到的事情,如继承、多态、封装(没有做不到,只有想不到)

0x01:对象的属性

对象的属性分为对象属性、私有属性 和类属性

对象属性:要创建对象后才能使用

私有属性:在内部就可以使用,在外部需要通过闭包才能使用

类属性可以通过对象名称直接使用

function func(){
        this.objPro1 = "对象属性";
        func.prototype.objPro2 = "对象属性";
        var privatePro = "私有属性";
    }

func.classPor = "类属性";
    console.log(func.classPor);    
    var f = new func();
    console.log(f.objPro1);

console.log(f.objPro2);

结果如图 :

我们再访问一下私有属性试试看

console.log(f.privatePro);

结果如图:

在内部访问私用属性:

function func(){
        this.objPro1 = "对象属性";
        func.prototype.objPro2 = "对象属性";
        var privatePro = "私有属性";
        this.getter = function(){
            return privatePro;
        }
    }

func.classPor = "类属性";
    var f = new func();

console.log(f.getter());

结果如图:

0x02:对象方法

对象方法包括:对象方法、私有方法和类方法,使用类似 前面的属性

function demoClass(){

//私有方法
        var privateMethod = function(){
            console.log("this is a private method");
        }

//属性方法
        this.objMethod = function(){
            console.log("this is a object method");
        }

demoClass.prototype.proMethod = function(){
            console.log("this is a object method too");
        }
    }

demoClass.classMethod = function(){
        console.log("this is class method");
    }

var f = new demoClass();
    f.objMethod();//调用属性方法
    f.proMethod();//调用属性方法

结果如图:

那我们再调用一下私有方法试一下:

f.privateMethod(); //调用私有方法

调用一下类方法:

f.classMethod();//调用类方法

demoClass.classMethod(); //调用类方法

总结:

1,对象方法是可以通过实例被调用的,无论是类内的属性方法或者是原型方法构造的属性方法。

2,类方法不能通过实例被调用,可以通过类名"."类方法()的模式调用。 类方法也叫静态方法

0x03:继承、封装、多态

js实现继承是通过 apply方法或者是通过prototype实现的,如果使用apply方法,子类的原型是子类,如果使用prototype,那么子类的原型也将继承父类。

function fatherClass(name,age){
        this.name = name;
        this.age = age;
        this.say = function(){
            console.log(" the say method of father class");
        }
    }

function oneSon(name,age){
        fatherClass.apply(this,[name,age]);
    }

var objOneSon = new oneSon("oneSon",20);
    console.log(objOneSon.name);
    console.log(objOneSon.age);
    objOneSon.say();
    console.log(objOneSon instanceof fatherClass);

console.log(objOneSon instanceof oneSon);

结果如图:

如果使用prototype方法

function fatherClass(name,age){
        this.name = name;
        this.age = age;
        this.say = function(){
            console.log(" the say method of father class");
        }
    }

function oneSon(name,age){
        fatherClass.apply(this,[name,age]);
    }
    oneSon.prototype = new fatherClass();
    var objOneSon = new oneSon("oneSon",20);
    console.log(objOneSon.name);
    console.log(objOneSon.age);
    objOneSon.say();
    console.log(objOneSon instanceof fatherClass);

console.log(objOneSon instanceof oneSon);

结果如图:

子类的方法会覆盖父类的方法,即表现的是多态性

function fatherClass(name,age){
        this.name = name;
        this.age = age;
        this.say = function(){
            console.log(" the say method of father class");
        }
    }

function anotherSon(name,age){
        this.say = function(){
            console.log("i am anotherSon");
        }
    }

anotherSon.prototype = new fatherClass();

function threeSon(name,age){
        this.say = function(){
            console.log("i am threeSon");
        }
    }

threeSon.prototype = new fatherClass();

function yes_or_no(cls){
        if(cls instanceof fatherClass){
            cls.say();
        }
    }

var objanotherSon = new anotherSon();
    var objthreeSon = new threeSon();
    yes_or_no(objanotherSon);

yes_or_no(objthreeSon);

结果如图所示:

即实现了类的多态。

时间: 2024-12-28 01:31:27

js面向对象的三大特性的相关文章

面向对象的三大特性之继承-基础知识总结------彭记(05)

面向对象的三大特性之继承: js中的某些对象没有一些需要的属性和方法,但是另外的对象有,那么拿过使用,就是继承. js中继承的实现方式: 1.混入式继承:通过循环将一个对象中的所有属性和方法混入到另外一个对象中: var me={ work:function(){ console.log('敲代码'): } }: var mayun={ money:9999999, car:'000', manager:function(){ console.log('管理巴巴...'); } } /*遍历,让

面向对象的三大特性

面向对象的三大特性: 封装, 继承, 多态 封装 封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节 继承: 子类拥有父类的属性和方法, 任何一个类都继承 Object (不管是java定义的还是自己定义的)::: Object.finalize()-->调用这个方法来释放资源: 多态(执行期间(执行期间-->你在控制台上写 java 类名 运行某个文件的时候叫执行期间)的动态绑定, 池绑定): 重载

接口和抽象类的对比,面向对象的三大特性和四大特性

Day09_SHJavaTraing_4-14-2017 一.接口和抽象类的对比1.相同点    ①都位于继承的顶端,用于被其他类实现或继承    ②都不能直接实例化对象    ③都包含抽象方法,其子类都必须覆写这些抽象方法2.区别 2.1从声明上: ①抽象类是一个类,需要使用关键字class声明        ②接口不是一个类,使用关键字interface声明 2.2从能够书写的成员上看: ①抽象类可以书写类中的所有成员 ②接口中只能书写成员变量和抽象函数(从JDK8开始,接口中可以有实现的函

面向对象设计三大特性

面向对象设计三大特性 一.封装 良好的封装能够减少耦合:类内部的实现可以自由地修改:类具有清晰的对外接口.比如建立一个猫的类,再建立一个狗的类,这样也算封装,只是会出现大量相似代码. 二.继承 继承的出现是因为对象类中出现过多重复代码,为解决该问题而建立父类,将这部分代码放进父类中,由子类继承.子类继承父类的所有特性,同时可以定义新的特性. 如果子类继承于父类,子类拥有父类非private的属性和功能:子类具有自己的属性和功能,即子类可以扩展父类没有的属性和功能:子类还可以以自己的方式实现父类的

关情纸尾-----面向对象的三大特性

面向对象的三大特性 .封装 .继承 .多态 一.封装 1.set方法 (1)作用:提供一个方法给外界设置成员变量,可以在方法里面对参数进行过滤 (2)命名规范: 方法都是以set开头,而且后面要跟上成员变量名,成员变量名的首字母必须是大写 (3)形参名称不要和成员变量同名 (4)返回值一定是void (5)一定要接收一个参数,而且参数类型和成员变量类型一致 2.get方法 (1)作用:返回内部的成员变量 (2)命名规范:方法的名称一般就跟成员变量同名 (3)一定有返回值,并且返回值类型和成员变量

面向对象的三大特性之一【封装】

类的成员属性可以封装,成员方法也可以封装,所谓封装就是用private关键词来修饰属性和方法,被封装后的属性和方法就变为私有属性和私有方法,这样的私有属性和方法不能被外部对象直接访问和使用,只能在类的内部使用,也就是说只能用$this访问到,私有方法供内部的其他方法调用,如果想让外部new出来的对象可以访问私有属性,可以在类里声明一个公共方法,一般不需要自己声明,可以用魔术方法__set和__get做到,魔术方法在需要的时候会自动调用,魔术方法都有由两个下划线组成的前缀.看下面的例子 class

面向对象的三大特性,五大基本原则

面向对象的三大特性: (1)继承 (2)封装 (3)多态 五大基本原则: (1)单一原则:一个类,最好只做一件事,只有一个引起它的变化: (2)开闭原则:对拓展开放,对修改封闭: (3)里氏替换原则:子类必须能够替换其基类.这一思想体现为对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础. (4)依赖倒置原则:依赖于抽象.具体而言就是高层模块不依赖于底层模块,二者都同依赖于抽象:抽象不依赖于具体,具体依赖于抽象. (5)接口隔离原则:使用多个小的

java面向对象的三大特性

1.面向对象的三大特性 继承.封装.多态 什么是继承? ①继承是面向对象程序设计能够提高软件开发效率的重要原因之一. ②继承是具有传递性的,就像现实中孙子不仅长得像爸爸而且还像他爷爷. ③继承来的属性和方法是隐式的,也就是在本类里面是看不见的. ④一个类只能有一个父类,也就是类只能是单继承. ⑤一个接口可以有多个父类,也就是接口可以是多继承. 实际项目开发中,一个类继承于另一个类,那么前者就是后者的子类,反则反之. 什么是封装? 对象数据和操作该对象的指令都是对象自身的一部分,能够实现尽可能对外

面向对象基础和面向对象的三大特性之一:封装(20161024)

面向对象 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Con