【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链

JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承。

类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply实现对象冒充,把类型定义的东西都复制过来,这样的继承子类与父类并没有多少关联,不互相影响,有利于保护自身的一些私有属性。

原型继承:每个函数都有自己的原型(prototype)属性,这个属性是在生成实例对象时自动创建的。它本身又是一个对象,拥有能够在实例间共享的属性和方法。而实例本身的属性和方法,则包含在构造函数中。换句话说,构造函数内部的属性和方法,在经过实例化后都成为了本地的属性和方法,而原型(prototype)中的属性和方法在实例中只是一种引用,因此能够被多个实例共享。

两者各有利弊,实际应用中多是两者混合应用。

以下就通过混合两者的示例去理解:

    function A(x) {
        this.x = x;
    }
    A.prototype.a = "a";
    function B(x, y) {
        this.y = y;
        A.call(this,x);//类继承
    }
    B.prototype.b1 = function() {
        alert("b1");
    }
    B.prototype = new A();//原型继承
    B.prototype.b2 = function() {
        alert("b2");
    }
    B.prototype.constructor = B;
    var obj = new B(1, 3);
时间: 2024-11-14 07:15:10

【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链的相关文章

ExtJS教程(2)--- Javascript类和对象基础知识

Javascript中的类其实就是一个function 如下面定义一个Person类 //定义一个类 function Person(){ this.name = 'jaune'; this.age = 18; } //创建一个对象 var person1 = new Person(); console.log(person1); /* * 控制台打出以下内容 * Person {name: "jaune", age: 18} */ 上面是一个简单的定义类及创建类的方法 //定义一个带

javascript 组合模式,对象冒充+原形链继承

//使用对象冒充来继承,只能继承构造对象中的信息 //原形中的无法继承构造对象中的方法每次实例化都会分配空间 //造成空间浪费 function Box(name,age){ this.name=name; this.age=age; this.run=function(){ return this.name+this.age+"运行中..." } } Box.prototype.family='加'; function Desk(name,age){ Box.call(this,na

对象冒充 实现多继承

注意:原型链时不支持多继承的 // 对象冒充实现类的多重继承 var ClassA=function (color){ this.color = color; this.sayColor = function(){ console.log(this.color); } }; var ClassB=function (name){ this.name = name; this.sayName = function(){ console.log(this.name); } }; //C 同时继承 A

类和对象、封装、继承、多态

? 类和对象 ? 类和对象的概念 类:客观存在的,抽象的,概念的东西.一个类可以被定义为描述行为的模板: 对象:对象是具体的,实际的,代表一个事物.对象具有状态和行为. 类是对象的模板,对象是类的一个具体实体. 定义Java中的类 一个类可以包含以下任意变量类型. a)局部变量: 方法里面,构造函数或块中定义的变量称为局部变量.该变量将被声明和初始化的方法中,当该方法完成该变量将被销毁. b)实例变量: 实例变量都在一个类,但任何方法之外的变量.这些变量在类被加载的实例化.实例变量可以从内部的任

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

js对象冒充实现的继承

//人类 function Person(name) { this.name = name; this.showName = function () { console.log("my name is " + name); } this.eat = function () { console.log("人是铁饭是钢..."); } } //白人 function WhitePerson(name) { this.temp = Person; this.temp(na

python类与对象的组合与继承

1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于"有一个"的场景中,继承用于"是一个"的场景中.例如,水池里有一个乌龟,天上有一个鸟,地上有一个小甲鱼,这些适合使用组合.青瓜是瓜,女人是人,鲨鱼是鱼,这些就应该使用继承啦实例如下: class Turtle: def __init__(self,x): self.num = x class Fish: def

JavaScript中的对象冒充

JavaScript里没有继承关键字,想要继承一个类需要用到“对象冒充”. 1 <!DOCTYPE html> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <title>对象冒

[Javascript]类数组对象为什么不能用for in进行遍历

上来说重点,再废话 类数组对象不能使用for(var key in  elements)进行遍历,这是因为类数组的最后一个哈希的键值对是length:n   n代表数组长度 在Javascript中,我们在DOM树上面获取页面的元素, 例如使用var emls=getElementsByTagName () var emls=querySelectedAll() 获得的elements包含多个dom元素,在学习的过程中,我没有使用for(var i=0;i<elements.length;i++