博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript面向对象(3)--prototype和继承
阅读量:5010 次
发布时间:2019-06-12

本文共 2785 字,大约阅读时间需要 9 分钟。

1、使用prototype实现继承 

1 function BaseClass() 2 { 3     var privateName = "private"; 4      5     this.pubicName1 = "public1"; 6      7     var privateMethod = function() 8     { 9         alert("privateMethod");10     }11     12     this.publicMethod1 = function()13     {14         alert("publicMethod1");15     }16     17     this.alertPrivateName = function()18     {19         alert(privateName);20         privateMethod();21     }22     23 }24 25 BaseClass.prototype.publicName2 = "public2";26 BaseClass.prototype.publicMethod2 = function()27 {28     alert("publicMethod2");29 }30 31 BaseClass.staticName = "static";32 BaseClass.staticMethod = function()33 {34     alert("staticMethod");35 }36 37 MyClass = function()38 {39     this.getName = function()40     {41         //无法访问基类的私有属性和方法42         alert(privateName);43         privateMethod();44     }45 }46 47 MyClass.prototype = new BaseClass();48 object = new MyClass();49 50 //可以访问基类公有属性51 alert(object.pubicName1);52 alert(object.publicName2);53 //可以访问基类静态属性54 alert(object.constructor.staticName);55 //可以访问基类公有方法56 object.publicMethod1();57 object.publicMethod2();58 //可以访问基类静态方法59 object.constructor.staticMethod();60 //可以通过基类公有方法访问基类的私有属性和方法61 object.alertPrivateName();

 

MyClass.prototype = new BaseClass()实现了MyClass对BaseClass的继承。MyClass可以访问基类的公有属性、静态属性、公有方法、静态方法,还能够通过基类的公有方法间接访问基类的私有属性和方法。非常完美的继承不是吗!

 

2、使用me实现继承

function BaseClass(){    var privateName = "private";        this.pubicName1 = "public1";        var privateMethod = function()    {        alert("privateMethod");    }        this.publicMethod1 = function()    {        alert("publicMethod1");    }        this.alertPrivateName = function()    {        alert(privateName);        privateMethod();    }    }BaseClass.prototype.publicName2 = "public2";BaseClass.prototype.publicMethod2 = function(){    alert("publicMethod2");}BaseClass.staticName = "static";BaseClass.staticMethod = function(){    alert("staticMethod");}MyClass = function(){    var me = new BaseClass();        me.getName = function()    {        //无法访问基类的私有属性和方法        alert(privateName);        privateMethod();    }        // 定义子类的公有方法    me.otherMethod = function()    {        alert("otherMethod");    }        return me;}

  // 通过Prototype定义的方法,无法访问

  MyClass.prototype.otherMethod2 = function()
  {
    alert("otherMethod2");
  };

object = new MyClass();//可以访问基类公有属性alert(object.pubicName1);alert(object.publicName2);//可以访问基类静态属性alert(object.constructor.staticName);//可以访问基类公有方法object.publicMethod1();object.publicMethod2();//可以访问基类静态方法object.constructor.staticMethod();//可以通过基类公有方法访问基类的私有属性和方法object.alertPrivateName();

 

 这种继承方式的效果基本和第一种一样,但是需要注意这种继承方式只能够通过在函数体内部对me增加属性和方法,无法使用prototype的方式,因为在new MyClass()的时候返回的其实是增加了属性和方法的me,MyClass只是一个壳而已。

 

转载于:https://www.cnblogs.com/supermancoke/p/3963030.html

你可能感兴趣的文章
poj1061——扩展gcd水题
查看>>
UVa400.Unix ls
查看>>
POJ 2299 Ultra-QuickSort 归并排序、二叉排序树,求逆序数
查看>>
Educational Codeforces Round 60 (Rated for Div. 2) C. Magic Ship
查看>>
Windows 2008 R2系统开机时如何不让Windows进行磁盘检测?
查看>>
Reporting Service服务SharePoint集成模式安装配置(1、虚拟机+ 2、AD域环境配置)
查看>>
WP7应用开发笔记(18) 本地化与多语言
查看>>
解决 .so文件64与32不兼容问题
查看>>
归并排序法
查看>>
【剑指offer】面试题26:复杂链表的复制
查看>>
spark开发生成EXE
查看>>
Vue 全家桶介绍
查看>>
java基础
查看>>
Vue运用
查看>>
[转载]基于ANSYS经典界面的单个螺栓联接的分析-1
查看>>
学习web的road-map
查看>>
url模块和querystring模块
查看>>
.net core入门 部署到Linux实践
查看>>
WPF Bitmap转Imagesource
查看>>
Java compiler level does not match the version of the installed Java project facet.解决方法
查看>>