对JS的继承的理解

js的原型继承

原型链是实现js继承的主要方法,他的原理是让利用原型让一个引用类型继承另一个引用类型的属性和方法。如果我们让一个原型对象等于一个实例,那么,此时的原型对象将包含指向另一个原型的指针假如另一个原型又等于一个对象的实例,如此一层套一层,这就是原型链的基本概念。

下边是一个简单的例子

    var Parent = function(){        this.name = 'parent' ;    } ;    Parent.prototype.getName = function(){        return this.name ;    } ;    Parent.prototype.obj = {a : 1} ;    var Child = function(){        this.name = 'child' ;    } ;    Child.prototype = new Parent() ;    var parent = new Parent() ;    var child = new Child() ;    console.log(parent.getName()) ; //parent    console.log(child.getName()) ; //child

登录后复制

以上代码定义了两个类型:parent和chiled。每个类型都有一个属性和方法,他们主要的区别就是child继承了parent,继承是通过创建parent的实例,并把这个实例赋给child.prototype实现的
实现的本质是重写了原型链对象,取代他的是新的实例。直接把父类的对象赋值给子类构造函数的原型,这样子类的对象就可以访问到父类以及父类构造函数的prototype中的属性。
我们可以用instanceof操作符判断,用这个操作符测试实例和原型链中出现过的构造函数,就返回true

借用构造函数

什么是构造函数

JavaScript的构造函数并不是作为类的一个特定方法存在的;当任意一个普通函数用于创建一类对象时,它就被称作构造函数,或构造器。一个函数要作为一个真正意义上的构造函数,需要满足下列条件:

1、 在函数内部对新对象(this)的属性进行设置,通常是添加属性和方法。

2、 构造函数可以包含返回语句(不推荐),但返回值必须是this,或者其它非对象类型的值。
关于JavaScript的构造函数,有一个容易混淆的地方,那就是原型的constructor属性。在JavaScript中,每一个函数都有默认的原型对象属性prototype,该对象默认包含了两个成员属性:constructor和proto。关于原型的细节就不在本文赘述了,我们现在关心的是这个constructor属性。

按照面向对象的习惯性思维,我们说构造函数相当于“类”的定义,从而可能会认为constructor属性就是该类实际意义上的构造函数,在new表达式创建一个对象的时候,会直接调用constructor来初始化对象,那就大错特错了。new表达式执行的实际过程已经在上文中介绍过了(四个步骤),其中用于初始化对象的是第三步,调用的初始化函数正是“类函数”本身,而不是constructor

    function CO(){    this.p = “I’m in constructed object”;    this.alertP = function(){        alert(this.p);        }    }    var o2 = new CO();

登录后复制

借用构造函数继承

这个基本思想很简单,也就是在子类型构造函数的内部调用超类型构造函数。因为函数只不过是在特定环境中执行代码的对象,因此可以通过使用apply()和call()方法也可以在新创建的对象上执行的构造函数。

   function superType(){       this.colors = ["red","blue","green"];   }   function subtype(){       superType.call(this);   }   var instance1 = new subtype();   instance1.colors.push("black");   alert(instance1.colors);//"red,blue,green,black"   var instance2 = new subtype();   alert(instance2.colors);//"red,blue,green"

登录后复制

通过使用call(),我们实际上是在新创建的subtype实例环境下调用了supertype()构造函数,这样一来,就会在新subtype对象上执行supertype构造函数,因此就会在subtype对象上执行supertype()函数中定义的所有对象初始化代码

   function superType(name){       this.name = name;   }   function subtype(){       superType.call(this,"Marry");       this.age = 29;   }   var instance = new subtype();   alert(instance.name);//"Marry"   alert(instance2.age);//"29"

登录后复制

这是构造函数的一个很大的优势,可以在子类型构造函数中向超类型构造函数传递参数。

本文讲解了JS的继承的理解,更多相关内容请关注【创想鸟】。

相关推荐:

JS解密,在线JS解密解密

JS解密,在线JS解密解密

JS解密,在线JS解密解密

以上就是对JS的继承的理解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3184180.html

(0)
上一篇 2025年3月31日 21:37:08
下一篇 2025年3月31日 21:37:14

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS实现简易版贪吃蛇小游戏

    nbsp;html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd”>    新建网页     …

    编程技术 2025年4月4日
    200
  • phpstorm怎么用js

    一、PHPStorm调试Javascript 在PHPStorm中创建test.html nbsp;html>        Test page     var test; var test2; console.log(“hello …

    2025年4月2日 编程技术
    200
  • vscode怎么压缩js代码

    vscode压缩js代码的方法: 1、在拓展商店里搜索“minify”,安装,安装成功后点重新加载 2、使用:F1运行文件缩小器Minify压缩js代码。 使用Minify的方法介绍: 缩小您的js,css和html文件以节省传输带宽。直接…

    2025年4月2日
    200
  • 怎么在vscode中调试js代码

    在左侧扩展中搜索debugger for chrome并点击安装 在自己的html工程目录下面点击f5,或者在左侧选择调试按钮 选择下拉按钮,会有一个添加,选择chrome 之后会出现laungh.json的配置文件在自己的项目目录下面 不…

    2025年4月2日 编程技术
    200
  • vscode如何配置js运行环境

    vscode界面很简洁安装完之后所有的功能都一目了然,我们需要安装插件可以点击如图的工具和语言: 安装以下两个插件如图:(你也可以选择其他这里只是示例) 我们要调试一个js,需要创建一个html文档里面添加js方法,简单创建个文件,可以直接…

    2025年4月2日 编程技术
    100
  • vue.js核心最基本的功能是什么

    vue.js核心最基本的功能是一个允许采用简洁的模板语法来声明式地将数据渲染进DOM的系统。vue.js的核心功能使得我们可以很方便地控制切换一个元素是否显示。 本文操作环境:windows10系统、vue 2.5.2、thinkpad t…

    2025年4月1日
    400
  • 怎么用JavaScript在Vue3中实现动画?

    概述 动画的实现其实不仅可以使用css的方式实现,而且还可以使用js的方式实现,二者有啥区别呢?css更加注重动画的展现,性能更好,而js的方式性能稍微差点,但是可以在动画执行的每一个过程中做些额外的操作。也就是说动画执行的开始-执行中-结…

    编程技术 2025年4月1日
    200
  • 利用JS实现点击按钮后图片自动切换的简单方法

    我么常常看到一个网站的主界面的图片可以切换自如,那么又是如何实现的呢? 1.HTML页面布局如图所示: 2.实现上述布局 swap.html    nbsp;html PUBLIC ‘-//W3C//DTD HTML 4.01 Strict…

    2025年4月1日
    200
  • 利用JS+HTML5实现图片上传预览效果(实例)

    这篇文章主要介绍了js+html5实现上传图片预览效果,结合完整实例形式分析了javascript上传图片本地预览的具体操作步骤与相关实现技巧,需要的朋友可以参考下 本文实例讲述了JS+HTML5实现上传图片预览效果。分享给大家供大家参考,…

    编程技术 2025年4月1日
    100
  • js停止冒泡的实例详解

    div { background-color: green; border: 1px solid; padding: 50px;} 实例演示了在添加不同事件监听时,冒泡与捕获的不同。 点击段落,我是冒泡。   点击段落,我是捕获。 func…

    2025年4月1日
    100

发表回复

登录后才能评论