摘要:继承原型式继承所谓原型是继承,就是定义一个函数,该函数中创建一个零食性的构造函数,将作为参数传入的对象作为这个构造函数的原型,最后返回这个构造函数的实例对象。借助构造函数无论是原型链还是原型是继承,都具有相同的问题。
继承 原型链
原型链是说明
构造函数或构造器具有prototype属性,对象具有proto属性,这就是之前学习的原。如果构造函数或对象A 。A的原型指向构造函数或对象B,B的原型在指向构造函数或对象C,依次类推,最终的构造函数或对象原型指向Object的原型。由此形成一条链状结构,被称之为原型链。按照上述描述,在B中定义的属性或发放,可以直接在A中使用不需要定义。 这就是继承,它允许每一个对象访问器原型链上的任何属性和方法。
原型链实现继承
function A(){
this.name ="a";
this.toString = function(){return this.name};
}
function B (){
this.name = "b";
}
function C(){
this.name ="c";
this.age=18;
this.getAge =function(){return this.age};
}
B.prototype =new A();
C.prototype =new B();
只继承于原型
出于对效率的考虑,尽可能地将属性和方法添加到原型上。可以采取以下方式:
不要为继承关系多带带创建对象;
尽量减少运行的方法搜索。
代码如下:
function A(){}
A.prototype.name ="a";
Aprototype.toString = function(){return this.name};
function B(){}
B.prototype=A.prototype;
B.prototype.name="b";
function C(){}
C.protype =B.protype;
C.protype.name="c";
C.protype.age=18;
C.protype.getAge =function(){return this.age};
原型链的问题
原型链虽然很强大,用它可以实现JavasScript中的继承,但同时也存在一些问题。
原型链实际上是在多个构造函数或对象直接共享属性或方法。
创建子类的对象是不能向父级的构造函数传递任何参数。
综上所述,在实际开发中很少会多带带使用原型链。
原型式继承
所谓原型是继承,就是定义一个函数,该函数中创建一个零食性的构造函数,将作为参数传入的对象作为这个构造函数的原型,最后返回这个构造函数的实例对象。
function object (o){
function F(){}
F.prototype = o ;
return new F();
}
根据原型继承的总结的object()函数实现继承,如下代码:
var preson ={
name:"MARY",
friends:["Tom","King"]
}
var anotherPerson =object(person);
anotherperson.friends.push("Rob");
console.log(antherperson.friends);
这种原型继承要求必须具有一个对象可以看作最为另一个对象的基础。
借助构造函数
无论是原型链还是原型是继承,都具有相同的问题。想要解决这样的问题的话可以借助构造函数(也可以叫做伪造对象的经典继承)。
这种方式实现非常简单,就是在子对象的构造函数中调用父对象的构造函数。具体可以通过调用函数。
apply()call()方法实现。
apply()和call()方法都允许传递制定某个对象的this。对于继承来讲, 可以实现在子对象的构造函数中调用父对象的构造函数,将子对象的this和父对象的this绑定子啊一起。
代码如下:
function SuperType(){
this.color=["red","green","blue"];
}
function SubType(){
SuperType.call(this);
}
var instance=new Subtype();
instance.color;
组合方式继承
组合继承,也叫做为经典继承,指的是将原型链或原型继承和借助构造函数的技术组合在一起,发挥二中的长处继承方式。
集体实现的思路就是:
使用原型链或原型是继承实现对原型的继承属性和方法的继承。
通过借助构造函数实现的实例对象的属性继承。
这样,即通过在原型上定义方法实现函数的重用,又可以保证每一个对象都又自己的专有属性。
代码如下:function SuperType(name){
this name = name;
}
superType.prototype.sayme=function(){
console.log(this.name)}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/108368.html
摘要:在使用原型链实现继承时有一些需要我们注意的地方注意继承后的变化。在了解原型链时,不要忽略掉在末端还有默认的对象,这也是我们能在所有对象中使用等对象内置方法的原因。 在上一篇post中,介绍了原型的概念,了解到在javascript中构造函数、原型对象、实例三个好基友之间的关系:每一个构造函数都有一个守护神——原型对象,原型对象心里面也存着一个构造函数的位置,两情相悦,而实例呢却又...
摘要:继承的继承可以简单的认为就是上篇文章中的寄生组合继承模型几乎一模一样,只是在语法结构上多了和关键字,另外一个区别就是父类和子类通过连接。 ES5继承 VS ES6继承 前言 ES6 已经发展了很长时间里 javascript相对于其他例如java等是一门比较怪异的语言, 由于其历史原因其继承机制和对象生成方式被人诟病. ES6 的出现将彻底改变这一现状, ES6 引入了新的生成对象(类...
摘要:首当其冲的便是接口中的每个声明必须是即便不指定也是,并且不能设置为非,详细规则可参考可见性部分介绍。函数式接口有着不同的场景,并被认为是对编程语言的一种强大的扩展。抽象类与中的接口有些类似,与中支持默认方法的接口更为相像。 原文链接:http://www.javacodegeeks.com/2015/09/how-to-design-classes-and-interfaces.htm...
摘要:构造函数通常首字母大写,用于区分普通函数。这种关系常被称为原型链,它解释了为何一个对象会拥有定义在其他对象中的属性和方法。中所有的对象,都有一个属性,指向实例对象的构造函数原型由于是个非标准属性,因此只有和两个浏览器支持,标准方法是。 从这篇文章开始,复习 MDN 中级教程 的内容了,在初级教程中,我和大家分享了一些比较简单基础的知识点,并放在我的 【Cute-JavaScript】系...
摘要:在中对一个实例命名非常的简单,在每一个类中可以有一个静态的实例对象,可以用类的完全限定名作为实例的名字。但不管怎样,用类的完全限定名作为实例的名字是一个非常好的方式。 本文是对log4j官网Introduction部分的翻译,原文链接地址:http://logging.apache.org/log...。 Introduction: 几乎每个大型应用都包含自己的日志API。1996年,...
阅读 1800·2021-11-22 09:34
阅读 3083·2019-08-30 15:55
阅读 662·2019-08-30 15:53
阅读 2051·2019-08-30 15:52
阅读 3000·2019-08-29 18:32
阅读 1988·2019-08-29 17:15
阅读 2391·2019-08-29 13:14
阅读 3557·2019-08-28 18:05