JavaScript面向对象(3)--prototype和继承

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只是一个壳而已。

 

时间: 2024-10-11 21:21:51

JavaScript面向对象(3)--prototype和继承的相关文章

javascript面向对象系列3——实现继承的6种方式

[前面的话]许多OO语言都支持两种继承方式:接口继承和实现继承.接口继承只继承方法签名,而实现继承则继承实际的方法,由于函数没有签名,在ECMAScript中无法实现接口继承,ECMAScript只支持实现继承,而且其实现继承主要是依靠原型链来实现的 [1][原型链继承]实现的本质是重写原型对象,代之以一个新类型的实例.实际上不是SubType的原型的constructor属性被重写了,而是SubType的原型指向了另一个对象——SuperType的原型,而这个原型对象的construtor属性

我对javascript面向对象编程的理解---------继承

要了解javascript继承首先我们了解什么是继承 继承:继承是指一个对象直接使用另一对象的属性和方法. 所及这是我们要达到的效果 先写一个父类 function Person(name,sex){ this.name = name; this.sex = sex; } Person.prototype.showName(){ alert(this.name); } Person.prototype.showSex(){ alert(this.sex); }

Javascript中的prototype与继承

通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性列表.javascript创建对象时采用了写时复制的理念. 只有构造器才具有prototype属性,原型链继承就是创建一个新的指针,指向构造器的prototype属性. prototype属性之所以特别,是因为javascript时读取属性时的遍历机制决定的.本质上它就是一个普通的指针. 构造器包括: 1.Object 2.Function 3.Array 4.Date 5.String 下面我们来举一些例

JavaScript面向对象轻松入门之继承(demo by ES5、ES6)

继承是面向对象很重要的一个概念,分为接口继承和实现继承,接口继承即为继承某个对象的方法,实现继承即为继承某个对象的属性.JavvaScript通过原型链来实现接口继承.call()或apply()来实现实现继承. 接口继承的实现在ES5中是比较麻烦,在其它OOP语言中一个extends关键字就可以实现,但在ES5中要通过原型链去模拟,非常难理解,对初学者很不友好,并且有好几种接口继承的方式.本文为了对初学者更友好,并不打算让读者了解接口继承的原理,而是直接把接口继承实现方法封装成一个函数,大家只

javascript面向对象(三)--继承

1 //继承: ECMAScript只支持 实现继承 依靠原型链来实现 2 //一.原型链 3 //先来理清下关系: 4 //每个构造函数都会有一个原型对象 Person --> prototype 5 //每一个原型对象都会有一个指向构造函数的指针 Person.prototype.constructor --> Person 6 //每一个实例都包含一个指向原型对象的内部指针 person1 --> prototype 7 //当原型对象等于另一个类的实例的时候,那么原型对象就会包含

javascript面向对象系列5——知识点(原型和原型链)

基本概念 [原型链]每个构造函数都有一个对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针.那么,如果原型对象等于另一个原型的实例,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针.如果另一个原型又是另一个原型的实例,那么上述关系依然成立.如此层层递进,就构成了实例与原型的链条. [原型对象]这个对象包含可以由特定类型的所有实例共享的属性和方法.所有引用类型默认都继承了Object,而这个继承也是通过原型链实现

JavaScript面向对象之类的继承

<!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="Content-

Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript时,可以选择面向过程的方式编程,显得高效:但在实际工作中,遇到的项目需求和框架较大的情况下,选择面向对象的方式编程显得尤其重要,Javascript原生语法中没有提供表述面向对象语言特性的关键字和语法(如extends.implement).为了实现这些面向对象的特性,需要额外编写一些代码,如下.

Javascript面向对象编程(二):构造函数的继承

这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个"动物"对象的构造函数. function Animal(){ this.species = "动物"; } 还有一个"猫"对象的构造函数. function Cat(name,color){ this.name = name; this.color = col