当前位置: 首页 > news >正文

对JS继承的一点思考

在Javascript语言中,new命令后面跟的不是类,而是构造函数。

举个例子,现在有一个叫做CAT的构造函数,表示猫对象的原型。

function CAT(name){
    this.name = name;
    this.age = 3;
}

当我们new这个构造函数的时候,就会生成一个猫对象的实例。

var Tom = new CAT('Tom');
var Jack = new CAT('Jack');
Tom.age = 5;
alert(Tom.name+','+Tom.age);  //Tom,5
alert(Jack.name+','+Jack.age);  //Jack,3  不受Tom的影响

但是通过上面的例子你会发现:用构造函数生成实例对象,它有一个缺点,那就是无法共享属性和方法。

因为这两个对象的age属性是独立的,修改其中一个,不会影响到另一个。

这样做的坏处就是会造成资源浪费,那么我们要如何来解决这件事呢,那就需要prototype出场了。

这个属性包含一个对象(以下简称"prototype对象"),所有实例对象需要共享的属性和方法,都放在这个对象里面;那些不需要共享的属性和方法,就放在构造函数里面。

CAT的代码利用prototype就可以改写成这样子了:
function CAT(name){
    this.name = name;
}
CAT.prototype.age = 3;
var Tom = new CAT('Tom');
var Jack = new CAT('Jack');
CAT.prototype.age = 5;
alert(Tom.name+','+Tom.age);   //Tom,5
alert(Jack.name+','+Jack.age);  //Jack,5

age属性放在prototype对象里,是两个实例对象共享的。只要修改了prototype对象,就会同时影响到两个实例对象。

相关文章:

  • 成为一名优秀的Developer的书单
  • HDU ACM 2586 How far away ?LCA-gt;并查集+Tarjan(离线)算法
  • php正则获取网页标题、关键字、网页描述代码
  • centos 6.4配置samba+ldap认证
  • 理解并取证:以太通道的动态协商机制的工作原理
  • Linux内核跟踪之trace框架分析【转】
  • 转 C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)...
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • Spring-AOP
  • Exchange2013下Telnet发送测试邮件失败及解决方案
  • 《FPGA全程进阶---实战演练》之搞定阻抗匹配
  • VI编辑常用命令
  • Redux系列x:源码分析
  • 12.28作业
  • 微信开发学习路线
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • js 实现textarea输入字数提示
  • ng6--错误信息小结(持续更新)
  • PAT A1017 优先队列
  • PHP 7 修改了什么呢 -- 2
  • react 代码优化(一) ——事件处理
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • 简单基于spring的redis配置(单机和集群模式)
  • 前言-如何学习区块链
  • 什么软件可以剪辑音乐?
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 详解移动APP与web APP的区别
  • 一道面试题引发的“血案”
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ###项目技术发展史
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)(1.13) SiK无线电高级配置(五)
  • (4.10~4.16)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)计算机毕业设计ssm电影分享网站
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (论文阅读11/100)Fast R-CNN
  • (转)【Hibernate总结系列】使用举例
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .bat批处理(一):@echo off
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net core 6 集成和使用 mongodb
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET 将多个程序集合并成单一程序集的 4+3 种方法
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .NET分布式缓存Memcached从入门到实战
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • /bin/rm: 参数列表过长"的解决办法
  • @SuppressLint(NewApi)和@TargetApi()的区别
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配