Javascript的原型和原型链

这篇具有很好参考价值的文章主要介绍了Javascript的原型和原型链。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

   原型是function对象的一个属性,它定义了构造函数制造出的对象的公共祖先,通过该构造函数产生的对象,可以继承该原型的属性和放法,因此原型也是对象。


   实例化为对象时:



Javascript的原型和原型链



   通过 .prototype 创建属性, 调用时,直接对象名.属性,就可以获取值。



Javascript的原型和原型链



   原型的作用主要是给我们构造函数实例化出来的对象设置公共的属性或者方法使用的。方法写在原型上,写在构造函数里的方法和属性会重新克隆一次,会导致占用内存较高。需要配置的属性是写在构造函数上,只有构造函数才能对原型上的属性改动。



Javascript的原型和原型链



    <script>
        function Person() {
            this.name = '冯大少';
        };

        Person.prototype.name = '冯二少';
        Person.prototype.say = function() {
            console.log('hello');
        };

        var person1 = new Person();
        console.log(person1.name);
        person1.say();
    </script>


Javascript的原型和原型链



   函数才有 prototype 属性,对象有 proto || [[prototype]] 属性。Javascript万物都是对象,所以一直访问 proto 属性就会产生一条链条,链条的尽头是null 。当js引擎查找对象的属性时,会先判断对象本身是否存在该属性,不存在的属性就会沿着原型链往上找。


   原型链解决的主要是继承问题,每个对象拥有一个原型对象,通过 proto 指针指向其原型对象,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向null(Object.proptotype.__proto__指向的是null)。这种关系被称为原型链(prototype chain),通过原型链一个对象可以拥有定义在其他对象中的属性和方法。


   函数才有 prototype 属性



Javascript的原型和原型链



   对象没有 prototype 属性

Javascript的原型和原型链



  打印空对象,返回 [[prototype]],链条的尽头是null。

Javascript的原型和原型链




   以实例一个对象为例:



Javascript的原型和原型链



Javascript的原型和原型链



   最后,通过写一个对两个数字进行加法运算计算器,简单介绍插件化开发的应用。标准是要写在函数里,因为函数里声明的变量或者函数,对外界无影响。为了让函数在浏览器加载的时候执行,那么还要立即执行函数。

步骤
声明一个构造函数
将公共方法写在原型上
将构造函数挂载到window上
写一个立即执行函数



Javascript的原型和原型链



    <script>
        (function() {
            function Sum() {}
            Sum.prototype.add = function(num1, num2) {
                return num1 + num2;
            };
            window.Sum = Sum;

        })();

        var sum = new Sum();
        var a = sum.add(3, 3);
        console.log(a);
    </script>


   代码中,window.Sum = Sum; 表示把构造函数挂载到 window 上。关于立即执行函数的标准写法,这里不再阐述,有兴趣的可以去拓展了解。文章来源地址https://www.toymoban.com/news/detail-507626.html

到了这里,关于Javascript的原型和原型链的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript对象:创建与属性访问

    在JavaScript编程中,对象是一种非常重要的数据结构,它用于存储多个属性和值的集合。对象的创建和属性访问是我们日常编程中经常用到的操作。本文将通俗易懂地解释JavaScript对象的创建方式和属性访问的方法,帮助你深入理解对象在JavaScript中的重要性和用法。 1. 对象的创

    2024年02月13日
    浏览(34)
  • 04、javascript 修改对象中原有的属性值、修改对象中原有属性的名字(两种方式)、添加对象中新属性等的操作

    其一、代码为: // 想将 obj 中的 flag 值,根据不同的值来变化(即:修改对象中原有的属性值); 其二、页面展示为: 其三、 js 中 for-in 的用法: // for-in 是一种特殊的 for 循环 专门用来循环对象; 注意:普通的 for 循环 可以单独循环、可以循环数组、可以伪数组、但无法循环

    2024年02月09日
    浏览(29)
  • javaScript 如何获取对象中非空的属性

    要获取JavaScript对象中所有具有值的属性,您可以使用 Object.entries()方法结合Array.prototype.filter()方法。以下是一个示例代码: 在上述示例中,我们定义了一个带有多个属性的对象 obj 。其中, city 属性的值为空字符串。 使用 Object.entries(obj) 可以将一个对象转换为包含  键值对

    2024年02月15日
    浏览(35)
  • JavaScript对象数组根据某个属性值筛选分类

    🤵 作者 : coderYYY 🧑 个人简介 :前端程序媛,目前主攻 web前端 ,后端辅助,其他技术知识也会偶尔分享🍀欢迎和我一起交流!🚀(评论和私信一般会回!!) 👉 个人专栏推荐 :《前端项目教程以及代码》 在开发中,这种需求还是挺常见的,常用于处理后端返回的数据

    2024年02月06日
    浏览(39)
  • JavaScript Array对象(属性、方法) 留言板案例

    一、创建数组对象的方式 var arrOb=new Array(值,........) var arrOb=Array(值,.......) var arrOb= [ 值,.........] var arrOb=new Array(n); arrOb [ 0]=值1; arrOb [ 1]=值2; 二、数组的属性 length      //数组中元素的数目 三、数组的方法 1、转为字符串 2、 join(\\\'连接符\\\')         将数组元素连接成字符串   

    2024年02月06日
    浏览(32)
  • web前端面试-- js深拷贝的一些bug,特殊对象属性(RegExp,Date,Error,Symbol,Function)处理,循环引用weekmap处理

    本人是一个web前端开发工程师,主要是vue框架,整理了一些面试题,今后也会一直更新,有好题目的同学欢迎评论区分享 ;-) web面试题专栏:点击此处 在JavaScript中,深拷贝和浅拷贝是两种不同的对象复制方式。 浅拷贝是指将一个对象的引用复制给另一个对象,这意味着两个

    2024年02月07日
    浏览(31)
  • JavaScript string对象(属性,方法)获取图片后缀案例 输入和输出结果转换形式案例

    一、创建string对象 var strOb = new String(\\\"abcefg\\\"); var strOb = String(\\\"abcefg\\\"); var strOb = \\\"abcefg\\\"; 二、属性 length    (字符串长度) 三、方法 1、子字符串位置 indexOf(string, [ index]) string : 查找的字符串的内容,必填项 index:开始查找位置,可有可无 返回值:返回值是查找到的子字符串的位

    2024年02月05日
    浏览(45)
  • java List<对象> 根据对象的一个属性进行去重

    1.实现一个自定义函数,该函数将用于确定两个对象是否相等,例如: 这个函数接受一个Function对象作为参数,该函数将从对象中提取唯一标识属性,并使用ConcurrentHashMap来确定是否已经处理过该属性值。   2.现在你可以使用这个函数来进行去重了,例如:  这个代码将对m

    2024年02月12日
    浏览(33)
  • 使用Lambda获取List对象中某一个属性以及获取特定条件下的属性对象

    使用Lambda表达式需要jdk1.8以上的环境 如下所示

    2024年02月15日
    浏览(36)
  • JavaScript之深度克隆、多种实现方式、列举各种方式的优缺点、对象自有属性、拷贝、复制

    在 JavaScript 中,对象和数组是引用类型,当将一个对象或数组赋值给另一个变量时,它们实际上是共享同一块内存空间。这意味着对一个对象或数组的修改会影响到所有引用它的变量。 为了创建一个独立的副本,可以使用深克隆。 JSON.stringify() 方法将 JavaScript 对象转换为一个

    2024年02月02日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包