广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >js中使用原型对象prototype需要注意的地方有哪些
  • 861
分享到

js中使用原型对象prototype需要注意的地方有哪些

2024-04-02 19:04:59 861人浏览 八月长安
摘要

这篇文章主要为大家展示了“js中使用原型对象prototype需要注意的地方有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中使用原型对象prototy

这篇文章主要为大家展示了“js中使用原型对象prototype需要注意的地方有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中使用原型对象prototype需要注意的地方有哪些”这篇文章吧。

我们先来一个简单的构造函数+原型对象的小程序

function CreateObj( uName, uAge ) {
      this.userName = uName;
      this.userAge = uAge;
    }
    CreateObj.prototype.showUserName = function () {
      return this.userName;
    }
    CreateObj.prototype.showUserAge = function () {
      return this.userAge;
    }

这个程序,没有什么问题,但是非常的冗余,每次扩展一个方法,都要写一次原型对象,我们可以把原型对象prototype当做一个字面量对象,所有的方法都在字面量对象中扩展,可以达到同样的效果:

CreateObj.prototype = {
      showUserAge : function(){
        return this.userAge;
      },
      showUserName : function(){
        return this.userName;
      },
    }
    var obj1 = new CreateObj( 'ghostwu', 22 );
    var obj2 = new CreateObj( '卫庄', 24 );
    console.log( obj1.showUserName(), obj1.showUserAge() ); //ghostwu 22
    console.log( obj2.showUserName(), obj2.showUserAge() ); //卫庄 24

但是这种原型(prototype)对象的写法,属于重写了CreateObj的默认原型对象,造成的第一个问题就是constructor不再指向CreateObj.

没有重写之前,constructor指向CreateObj

function CreateObj( uName, uAge ) {
      this.userName = uName;
      this.userAge = uAge;
    }
    CreateObj.prototype.showUserName = function () {
      return this.userName;
    }
    CreateObj.prototype.showUserAge = function () {
      return this.userAge;
    }
    console.log( CreateObj.prototype.constructor === CreateObj ); //true

重写之后,constructor指向Object

CreateObj.prototype = {
      showUserAge : function(){
        return this.userAge;
      },
      showUserName : function(){
        return this.userName;
      },
    }
    console.log( CreateObj.prototype.constructor === CreateObj ); //false
    console.log( CreateObj.prototype.constructor === Object ); //true

所以说,constructor不能准确的标识对象,因为他会被修改

我们之前写的程序,基本都是在原型对象(prototype)上扩展完了方法之后,再实例化对象,我们看下,先实例化对象,再在原型对象(prototype)上扩展函数,

实例对象是否能正常的调用到扩展的方法?

function CreateObj( uName, uAge ) {
      this.userName = uName;
      this.userAge = uAge;
    }
    var obj1 = new CreateObj( 'ghostwu', 22 );
    CreateObj.prototype.showUserName = function(){
      return this.userName;
    }
    console.log( obj1.showUserName() ); //ghostwu

可以正常调用,但是,如果原型对象是重写的,就调用不到了

function CreateObj( uName, uAge ) {
      this.userName = uName;
      this.userAge = uAge;
    }
    var obj1 = new CreateObj( 'ghostwu', 22 );
    CreateObj.prototype = {
      showUserName : function(){
        return this.userName;
      }
    }
    console.log( obj1.showUserName() ); //报错

因为重写了原型对象之后,同时实例化又是在重写之前发生的,所以实例的隐式原型__proto__不会指向重写的原型对象,所以就调用不到另一个问题,如果在原型对象(prototype)上有引用类型,千万小心,因为多个实例共用原型对象,只要有一个实例改变了引用类型的值,其他实例全部会收到改变之后的结果。

function CreateObj(){}
    CreateObj.prototype = {
      name : 'ghostwu',
      skills : [ 'PHP', 'javascript', 'linux' ]
    };
    var obj1 = new CreateObj();
    obj1.skills.push( 'python' );
    var obj2 = new CreateObj();
    console.log( obj2.skills ); //'php', 'javascript', 'linux', 'Python'

原型对象(prototype)的共享特性,可以很方便的为一些内置的对象扩展一些方法,比如,数组去重复

Array.prototype.unique = function(){
      var res = [];
      for( var i = 0, len = this.length; i < len; i++ ){
        if( res.indexOf( this[i] ) == -1 ) {
          res.push( this[i] ); 
        }
      }
      return res;
    }
    var arr = [ 10, 20, 30, 20, 30, 20, 40, 20 ];
    console.log( arr.unique() ); //10, 20, 30, 40

但是,不要随便往内置的对象上面扩展方法,在多人协作开发,很容易产生覆盖,以及污染。

以上是“js中使用原型对象prototype需要注意的地方有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网JavaScript频道!

--结束END--

本文标题: js中使用原型对象prototype需要注意的地方有哪些

本文链接: https://www.lsjlt.com/news/77442.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • js中使用原型对象prototype需要注意的地方有哪些
    这篇文章主要为大家展示了“js中使用原型对象prototype需要注意的地方有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“js中使用原型对象prototy...
    99+
    2022-10-19
  • 使用Python和Javascript创建API对象,有哪些需要注意的地方?
    API是指应用程序编程接口,是不同软件系统之间相互交互的一种手段。API对象是API的核心,是用于封装API接口的一种对象。使用Python和Javascript创建API对象是非常常见的操作,但是在创建的过程中,有一些需要注意的地方。 ...
    99+
    2023-07-19
    javascript api 对象
  • 使用redis集群需要注意的地方有哪些
    小编给大家分享一下使用redis集群需要注意的地方有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Redis集群相对单机在功...
    99+
    2022-10-18
  • java继承中需要注意的地方有哪些
    这篇文章给大家分享的是有关java继承中需要注意的地方有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、注意点(1)Java之中只允许多层继承,不允许多重继承,Java存在单继承局限。(2)在Java中,所...
    99+
    2023-06-15
  • Java 开发技术中,打包对象的步骤有哪些需要注意的地方?
    在 Java 开发中,我们常常需要将代码打包成可执行的文件或者库来发布和使用。打包过程中需要注意的地方很多,这篇文章将介绍在打包对象时需要注意的几个方面。 一、选择打包工具 Java 开发中常用的打包工具有 Maven 和 Gradle。...
    99+
    2023-07-20
    开发技术 打包 对象
  • 在 Go 中使用 NumPy 索引:有哪些需要注意的地方?
    NumPy 是一个广泛使用的 Python 科学计算库,它提供了高效的数组操作和数学函数。然而,由于 Python 的解释执行特性,NumPy 在处理大型数据集时可能会变得缓慢。为了解决这个问题,一些开发者开始使用 Go 语言来实现高性能...
    99+
    2023-06-27
    文件 numpy 索引
  • Git在Unix系统下的使用:有哪些需要注意的地方?
    Git是一款非常流行的版本控制工具,可以帮助开发人员轻松地管理代码的版本,同时也可以协助团队协作开发。在Unix系统下使用Git也非常方便,但是仍然有一些需要注意的地方。本文将详细介绍使用Git时需要注意的事项,并提供一些演示代码。 安...
    99+
    2023-08-09
    leetcode git unix
  • 日本服务器租用需要注意的地方有哪些
    日本服务器租用需要注意的有:1、确认日本服务器质量,如类型和品牌、稳定性、安全性等;2、确认日本服务器机房带宽情况,可用ping命令测试IDC服务商客户的网站;3、看日本服务器机房是否有好的数据中心冗余。具体内容如下:确认服务器质量日本服务...
    99+
    2022-10-09
  • 租用美国服务器有哪些地方需要注意的
    租用美国服务器需要注意的地方有:1、美国服务器配置,根据业务需求进行合理选择;2、服务器售后服务质量是否可靠;3、选择合适的服务器带宽资源;4、对美国服务器的稳定性进行测试考察。具体内容如下:选择合适的配置,要根据自己业务的需求情况选择合适...
    99+
    2022-10-10
  • Java中的HTTP二维码API:有哪些需要注意的地方?
    在当今数字化时代,二维码已经成为了人们常用的信息传递方式之一。二维码可以在不同的场景中使用,比如商业活动、广告宣传、门票验证等等。Java作为一门广泛使用的编程语言,也提供了HTTP二维码API来支持二维码的生成和解码。在使用Java中的...
    99+
    2023-08-23
    http 二维码 api
  • Java关键字在开发中有哪些需要注意的地方?
    Java作为一种面向对象的编程语言,其关键字(keywords)在开发过程中扮演着非常重要的角色。这些关键字有时候会对程序的性能、可读性、可维护性等产生影响。在本篇文章中,我们将探讨Java关键字在开发中需要注意的地方,并附带演示代码。 一...
    99+
    2023-09-12
    关键字 开发技术 文件
  • PostgreSQL中APP在涉及locks时需要注意的地方有哪些
    这篇文章主要讲解了“PostgreSQL中APP在涉及locks时需要注意的地方有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL中A...
    99+
    2022-10-18
  • 异步编程中Java数据类型的选择有哪些需要注意的地方?
    异步编程是现代软件开发中重要的一部分。在Java中,异步编程可以使用多种方式来实现,包括线程、Future和CompletableFuture等。然而,在使用这些技术时,我们需要注意Java数据类型的选择。在本文中,我们将探讨异步编程中Ja...
    99+
    2023-09-16
    数据类型 linux 异步编程
  • IDE 文件中的 ASP 重定向:有哪些需要注意的地方?
    在 ASP 的开发中,我们经常需要使用重定向功能来实现页面的跳转。ASP 重定向是一种非常常见的页面跳转方式,它可以帮助用户快速地跳转到目标页面,同时也能够帮助开发人员更好地管理页面之间的关系。在本文中,我们将介绍 ASP 重定向的相关知...
    99+
    2023-10-29
    重定向 ide 文件
  • 在java中使用泛型方法时需要注意哪些问题
    这篇文章给大家介绍在java中使用泛型方法时需要注意哪些问题,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网...
    99+
    2023-06-14
  • 用Go语言编写Apache接口,有哪些需要注意的地方?
    随着互联网应用越来越普及,Web服务器也变得越来越重要。Apache是最常用的Web服务器之一,它支持大量的模块和插件,可以满足不同的需求。在本文中,我们将探讨如何用Go语言编写Apache接口,并介绍一些需要注意的地方。 一、Go语言和A...
    99+
    2023-10-05
    函数 apache 接口
  • PHP编程中文件加载算法有哪些需要注意的地方?
    在PHP编程中,文件加载算法是一个非常重要的部分。在加载文件时,我们需要注意一些细节,以确保代码的正确性和性能。在本文中,我们将介绍PHP编程中文件加载算法的一些需要注意的地方。 一、文件的路径 在PHP中,文件路径有两种方式:绝对路径和相...
    99+
    2023-08-07
    编程算法 文件 load
  • 数组同步在Python编程中的应用有哪些需要注意的地方?
    在Python编程中,数组同步是一个非常重要的概念。它指的是将多个数组中的元素进行同步操作,以保证它们的值始终保持一致。在实际编程中,我们经常会遇到需要对多个数组进行同步操作的情况,这时就需要注意一些细节问题,以确保程序能够正确运行。本文...
    99+
    2023-10-11
    编程算法 数组 同步
  • 调试 LeetCode 面试时,Java 对象的使用方式有哪些值得注意的地方?
    在面试中,LeetCode 是一个非常重要的环节。作为一名 Java 开发者,我们需要掌握 Java 对象的使用方式,以便在面试中能够高效地解决问题。本文将介绍 Java 对象的使用方式,并演示一些实用的代码示例。 Java 对象的创建 ...
    99+
    2023-10-10
    对象 leetcode 面试
  • 在IE中使用HTML5功能需要注意的点有哪些
    在IE中使用HTML5功能需要注意的点有哪些,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。HTML5草案的前身名为Web Ap...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作