6.3 继承——原型链

6.3.1原型链

1:基本概念

  原型链:每个构造函数都有一个prototype,每个prototype都包含一个指向构造函数的指针,而每个实例都包含一个指向prototype的内部指针。当

       当我们令一个prototype等于另一个类型的实例,此时这个prototype就继承了另一个类型的prototype。

2:原型搜索机制

  当我们读取一个属性时的过程:①实例属性②实例.prototype③实例.prototype.prototype……最后搜索Object prototype

3:默认的原型Object

  所有函数的默认原型都是Object的实例,因此默认原型都会包含一个内部指针,指向Object.prototype,所以所有自定义类型也都会继承toString(),valueOf()等默认方法的原因

4:谨慎的定义方法

  ①给原型添加方法的代码一定要放在替换原型的语句之后

    //替换原型,继承superType()
    subType.prototype = new SuperType();
    //添加新方法
    subType.prototype.getSubValue = function(){
    return this.subproperty;
};

  ②通过原型链实现继承时,不能使用对象字面量创建原型方法,这样会重写原型链

时间: 2024-11-09 20:44:57

6.3 继承——原型链的相关文章

Javascript 组合继承 原型链继承 寄生继承

Javascript继承通常有三种方式. 第一种:组合式继承: function SuperType(name) { this.name = name; this.colors = ["red", "blue", "green"]; } SuperType.prototype.sayName = function() { console.log(this.name); }; function SubType(name, age) { //通过ca

JavaScript核心-继承-原型链

继承是面向对象的编程的一大特性,很多OO语言都支持两种继承方式:接口继承和实现继承.在ECMAScript中,由于函数没有签名,所以无法实现接口继承,只有实现继承. 实现继承主要是依靠原型链来实现的. 简单回顾一下构造函数.原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而对象的每个实例都有一个指向原型对象的内部指针. 再回顾一下原型对象的用途:用途是包含可以由特定类型的所有实例共享的属性和方法. 原型对象也是一个简单的对象,如果我们让一个原型对象等于另一个

JS面向对象之继承——原型链

原型对象 每个javascript对象都有一个原型对象,这个对象在不同的解释器下的实现不同.比如在firefox下,每个对象都有一个隐藏的__proto__属性,这个属性就是“原型对象”的引用. 原型链 由于原型对象本身也是对象,根据上边的定义,它也有自己的原型,而它自己的原型对象又可以有自己的原型,这样就组成了一条链,这个就是原型链,JavaScritp引擎在访问对象的属性时,如果在对象本身中没有找到,则会去原型链中查找,如果找到,直接返回值,如果整个链都遍历且没有找到属性,则返回undefi

继承-原型链

function sayName(){ this.property = true; } sayName.prototype.getProperty = function(){ return this.property; } function sayAge(){ this.proAge =false; } sayAge.prototype = new sayName(); sayAge.prototype.getAge = function(){ return this.proAge } var

JavaScript继承-原型链继承

//原型链继承 function SuperType(){ this.name = 'super'; this.girlFriends = ["xiaoli","xiaowang"]; } SuperType.prototype.sayName = function(){ console.log(this.name); } function SubType(){ this.age = 20; } //创建SuperType的实例赋给SubType的原型 //实现继承

对象冒充实现继承,原型链继承方法,以及组合继承模式

function Person (){ this.name=“张三”; this.run = function(){ alert( this.name+'在运动' ) } } Person.prototype.work = function(){ alert( this.name+'在工作’ ) } // web类 继承person类 原型链+对象冒充的组合继承模式 function web(){ Person.call( this )  //  对象冒充实现继承 } var w = new w

面向对象JS ES5/ES6 类的书写 继承的实现 new关键字执行 this指向 原型链

一 .什么是面向对象? 面向对象(Object Oriented),简写OO,是一种软件开发方法. 面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物. 面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台.分布式系统.网络管理结构.CAD技术.人工智能等领域. 面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式. 编程范式 一般可以

一种基于JS原型链的类的构造与派生。【原创】

转载请注明出处 2016.7.5 by Totooria Hyperion http://demo.th-shr.com:9999/ // 初始化prototype和静态方法 function initClass(constructor,_proto) { // 配置prototype for(var key in _proto) { constructor.prototype[key] = _proto[key]; if(typeof _proto[key] == "function"

Angularjs Scope 原型链

我们知道scope是可以继承的.scope的继承和js原型链是同一个概念. <div ng-controller="parentCtrl"> {{name}} <div ng-controller="childCtrl"> {{name}} </div> </div> 在angular中,ng-controller指令会帮我们创建一个scope并继承它的父亲scope . parentCtrl scope继承自 $ro