javascript 原型实现的继承

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>javascript实现的继承</title>
    <script type="text/javascript">
        /**
         * js实现继承的第一种方式是基于原型链的方式
         */
        function Parent() {
            this.pv = "parent";
        }
        Parent.prototype.pp = "ok";
        Parent.prototype.showParentValue = function() {
            alert(this.pv);
        }

        function Child() {
            this.cv = "child";
        }
        /**
         * 如果想进行赋值之后,才进行原型链的设定,这样赋值的原型对象
         * 就会被重写掉,赋值的对象就不存在在新的原型对象中
         */
        // Child.prototype.showChildValue = function() {
        // alert(this.cv);
        // }
        /**
         * 让Child的原型链指向Parent对象,也就等于完成了一次继承
         * 注意内存模型
         */
        Child.prototype = new Parent();

        Child.prototype.showChildValue = function() {
            alert(this.cv);
        }
        /**
         * 此时完成的对父类对象的覆盖
         */
        Child.prototype.showParentValue = function() {
            alert("override parent");
        }
        /**
         * 在使用原型链进行继承一定要注意一下问题:
         * 1、不能在设定了原型链之后,再重新为原型链赋值
         * 2、一定要在原型链赋值之后才能添加或者覆盖方法
         */

        /**
         * 当执行了下面这句话之后,意味着Child的原型又重写了
         * 这样就不存在任何的继承关系了
         * 使用原型链需要注意的第一个问题
         */
        // Child.prototype = {
        // showChildValue:function() {
        // alert(this.v);
        // }
        // }

        var c = new Child();
        c.showParentValue();
        c.showChildValue();
        alert(c.pp);

    </script>
</head>
<body>
</body>
</html>

  

时间: 2024-08-08 05:35:37

javascript 原型实现的继承的相关文章

JavaScript原型链和继承

1.概念 JavaScript并不提供一个class的实现,在ES6中提供class关键字,但是这个只是一个语法糖,JavaScript仍然是基于原型的.JavaScript只有一种结构:对象.每个对象都有一个私有属性:_proto_,这个属性指向它构造函数的原型对象(property).它的原型对象也有一个属于自己的原型对象,这样层层向上知道一个对象的属性为null.根据定义null没有原型,它是这个原型链中的最后一个环节. 几乎所有的JavaScript中的对象都是位于原型链顶端的Objec

Javascript:原型模式类继承

原型模式 每个函数(准确说不是类.对象)都有一个prototype属性,这个属性是一个指针,指向一个对象. 使用原型对象的好处是可以让所有对象实例共享它包含的属性和方法. 1.原型对象 (1)当创建一个新函数,就会为该函数创建一个prototype属性,这个属性指向函数的原型对象. (2)默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向 prototype属性所在函数  的指针. (3)实例的内部包含一个指针,叫[[Prototype]].不过

JavaScript 原型链、继承

对象创建 javascript 中原型我们应该最熟悉,记得刚接触js时候最长说的一句话就是,万事万物皆对象,额那时的我不怎么懂,嗯...现在的我感觉说的js里这么说确实有一定的道理,可见js中对象的重要性.好的那么创建对象的方法有以下几种方式吧: 以上那对象的创建方式:字面量.构造函数.Object.create(); 原型链 记得当时项目开发中有个同事问到我的一个问题,你给我讲讲原型链呗,上网搜了张图,这张图我觉得很能诠释所有的关系列表,以及几者之间有联系,基本上很清晰: // 构造函数 ==

javascript 原型链实现继承简单例子

function A(){ this.name="zhangsan"; } A.prototype.getName=function(){ return this.name; } function B(){ this.age=20; } B.prototype=new A(); //子类型有时候需要重写超类型中的某个方法,或者需要添加母类型中不存在的某个方法.但不管怎 样,给原型添加方法的代码一定要放在替换原型的语句之后. B.prototype.getAge=function(){

JavaScript之基础-16 JavaScript 原型与继承

一.JavaScript 原型 原型的概念 - 在JavaScript中,函数本身也是一个包含了方法和属性的对象 - 每个函数中都有一个prototype属性,该属性引用的就是原型对象 - 原型对象是保存共享属性值和共享方法的对象 为对象扩展属性 - 扩展单个对象的成员 - 扩展共享的属性值 - 内存图描述 删除属性 - 可以使用delete关键字删除对象的属性 自由属性与原型属性 - 自有属性:通过对象的引用添加的属性;其它对象可能无此属性;即使有,也是彼此独立的属性 emp1.job = '

对Javascript的原型,原型链和继承的个人理解

继承是OO语言中一个最为人津津乐道的概念,也是初接触Javascript的初学者难理解的概念=.=继承主要分为两种:一种是接口继承,另一种是实现继承.而在ECMAScript中只支持实现继承,所以我们今天来讨论讨论实现继承.实现继承就是继承实际的方法,主要依靠原型链来实现.讲到这里我们就需要讨论讨论什么是原型链. 1.什么是原型 要理解原型链我们首先要知道什么是原型.我们知道每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象包含所有实例共享的属性和方法.所以我个人

javascript原型链继承

一.关于javascript原型的基本概念: prototype属性:每个函数都一个prototype属性,这个属性指向函数的原型对象.原型对象主要用于共享实例中所包含的的属性和方法. constructor属性:每个原型对象都有一个constructor属性,这个constructor属性包含一个指向prototype属性所在函数的指针. 例如 Foo.prototype.constructor指向Foo函数.这个属性是只读的. __proto__属性(ES6通过对__proto__属性进行标

JavaScript原型继承的陷阱

JavaScript原型继承的陷阱 JavaScript默认采用原型继承.虽然没有类(class)的概念,它的函数(function)可以充当构造器(constructor).构造器结合this,new可以构建出类似Java的类.因此,JavaScript通过扩展自身能模拟类式(class-based)继承. JavaScript和其它面向对象语言一样,对象类型采用引用方式.持有对象的变量只是一个地址,而基本类型数据是值.当原型上存储对象时,就可能有一些陷阱. 先看第一个例子 var creat

理解javascript原型和作用域系列(6)——继承

为何用“继承”为标题,而不用“原型链”? 原型链如果解释清楚了很容易理解,不会与常用的java/C#产生混淆.而“继承”确实常用面向对象语言中最基本的概念,但是java中的继承与javascript中的继承又完全是两回事儿.因此,这里把“继承”着重拿出来,就为了体现这个不同. javascript中的继承是通过原型链来体现的.先看几句代码 以上代码中,f1是Foo函数new出来的对象,f1.a是f1对象的基本属性,f1.b是怎么来的呢?——从Foo.prototype得来,因为f1.__prot