返回顶部
首页 > 资讯 > 前端开发 > node.js >如何浅析JavaScript的写类方式
  • 244
分享到

如何浅析JavaScript的写类方式

2024-04-02 19:04:59 244人浏览 薄情痞子
摘要

如何浅析javascript的写类方式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。从这篇起,会由浅到深的分析js OO之写类方式,大概会有5

如何浅析javascript的写类方式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

从这篇起,会由浅到深的分析js OO之写类方式,大概会有5-8篇。后面陆续会分析流行库(框架)的写类方式。一些写类工具函数或框架的写类方式本质上都是 构造函数+原型。只有理解这一点才能真正明白如何用JavaScript写出面向对象的代码。或者说组织代码的方式使用面向对象方式。当然用JS也可写出函数式的代码,它是多泛型的。

为了讨论的单一性,暂不考虑类的继承,(私有,受保护)属性或方法。EMCAScript中实际没有类(class)的概念,但可以把它理解为更广义的概念。

1、构造函数方式

 function Person(name) {      this.name = name;      this.getName = function() {          return this.name;      }  }

这种风格让写过Java的有点亲切在于构造一个对象需要配置一些参数,参数要赋值给类里面this。但与Java的区别是JS用function来代替class,参数也无需定义类型。

类写好了,我们造几个对象:

var p1 = new Person("Jack");  var p2 = new Person("Tom");  console.log(p1 instanceof Person);//true  console.log(p2 instanceof Person);//true

控制台输出也证明了p1,p2的确是类Person的对象实例。

这种方式的优点是:可以根据参数来构造不同的对象实例 ,缺点是构造时每个实例对象都会生成getName方法版本,造成了内存的浪费 。

经验丰富的程序员用一个外部函数来代替类方法,达到了每个对象共享同一个方法。改写后的类如下:

//外部函数  function getName() {      return this.name;  }  function Person(name) {      this.name = name;      this.getName = getName;//注意这里  }

有人可能觉得代码风格有点差强人意,怎么看也没有Java那么紧凑。但的确可以减少内存的消耗。

2、原型方式

 function Person(){}  Person.prototype.name = "jack";  Person.prototype.getName = function() { return this.name;}

把类的属性(字段),方法都挂在prototype上。

造几个对象测试

var p1 = new Person();  var p2 = new Person();  console.log(p1.getName());//jack  console.log(p2.getName());//jack

可以看出输出的都是jack,原型方式的缺点就是不能通过参数来构造对象实例 (一般每个对象的属性是不相同的) ,优点是所有对象实例都共享getName方法(相对于构造函数方式),没有造成内存浪费 。

3、构造函数+原型

取前面两种的优点:

a、用构造函数来定义类属性(字段)。

b、用原型方式来定义类的方法。

 function Person(name) {      this.name = name;  }  Person.prototype.getName = function() {      return this.name;  }

这样,即可通过构造函数构造不同name的人,对象实例也都共享getName方法,不会造成内存浪费。

但似乎这样的代码风格似乎仍然没有Java的类那么紧凑,把属性,构造方法(函数),方法都包在大括号内。

public class Person {      //属性(字段)      String name;          //构造方法(函数)      Person(String name) {          this.name = name;      }         //方法      String getName() {          return this.name;      }  }

为了让JS代码风格更紧凑,把挂在prototype的方法代码移到function Person的大括号内。

function Person(name) {      this.name = name;      Person.prototype.getName = function() {          return this.name;      }  }

似乎很神奇,还能这么写啊!验证一下

var p1 = new Person("Jack");  var p2 = new Person("Tom");  console.log(p1.getName());//Jack  console.log(p2.getName());//Tom

没有报错,控制台也正确输出了。说明可以这么写,似乎很***。

a 、可以通过传参构造对象实例

b 、对象实例都共享同一份方法不造成内存浪费

c 、代码风格也比较紧凑

但每次new一个对象的时候都会执行

Person.prototype.getName = function() {          return this.name;  }

造成了不必要的重复的运算。因为getName方法挂在prototype上只需执行一次即可。只需稍微改造下

function Person(name) {      this.name = name;      if(Person._init==undefined) {          alert("我只执行一次!");          Person.prototype.getName = function() {              return this.name;          }          Person._init = 1;         }     }

new两个对象

var p1 = new Person("Andy"); //***次new会弹出'我只执行一次!'  var p2 = new Person("Lily"); //以后new的对象不会再执行了

看完上述内容,你们掌握如何浅析JavaScript的写类方式的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网node.js频道,感谢各位的阅读!

--结束END--

本文标题: 如何浅析JavaScript的写类方式

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

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

猜你喜欢
  • 如何浅析JavaScript的写类方式
    如何浅析JavaScript的写类方式,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。从这篇起,会由浅到深的分析JS OO之写类方式,大概会有5...
    99+
    2024-04-02
  • 怎么浅析JavaScript的写类方式
    怎么浅析JavaScript的写类方式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。这篇开始会记录一些写类的工具函数。以下列举...
    99+
    2024-04-02
  • 浅析JavaScript中的隐式类型转换
    目录为什么会出现隐式类型转换隐式类型转换的内部转换机制何时会触发ToPrimitive或ToNumber具体案例分析总结为什么会出现隐式类型转换 这个问题的本质原因是因为JavaSc...
    99+
    2023-03-08
    JavaScript隐式类型转换 JavaScript隐式类型
  • 如何实现JavaScript函数式的浅析
    这篇文章给大家介绍如何实现JavaScript函数式的浅析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JS函数式浅析0x00 入门的导语(废话)最近两年你要说函数式编程不火...
    99+
    2024-04-02
  • 如何学习javascript?方法浅析
    随着互联网的普及和应用的广泛,越来越多的人开始关注前端开发。而在前端开发中,Javascript是必不可少的一部分。但是,很多人在学习Javascript时遇到了困难,不知道该如何着手学习。本文将从以下几个方面为大家介绍学习Javascri...
    99+
    2023-05-14
  • 怎么引入javascript代码?方式浅析
    近年来,随着JavaScript技术的高速发展,越来越多的开发者开始在自己的项目中使用这种语言。在使用JavaScript时,引入方式是非常重要的一环。但是,事实上有一些场景下并不适合采用JavaScript的传统引入方式,即<scr...
    99+
    2023-05-14
  • 实现JavaScript编写类的方式有哪些
    这篇文章将为大家详细讲解有关实现JavaScript编写类的方式有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。网上实现javascript写类的方法有...
    99+
    2024-04-02
  • 如何浅析Bootstrap的CSS类名设计
    这期内容当中小编将会给大家带来有关如何浅析Bootstrap的CSS类名设计,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在构建类似 Bootstrap 这样的 CSS ...
    99+
    2024-04-02
  • 浅析JavaScript中严格模式的使用
    目录认识严格模式严格模式限制认识严格模式 在ECMAScript5标准中,JavaScript提出了严格模式的概念(Strict Mode): 严格模式很好理解,是一种具有限制性的J...
    99+
    2023-05-18
    JavaScript严格模式使用 JavaScript严格模式
  • javascript平方如何写
    这篇文章主要为大家展示了“javascript平方如何写”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“javascript平方如何写”这篇文章吧。 ...
    99+
    2024-04-02
  • HTML如何设置背景​?多种方式浅析
    在Web设计中,设置背景是一个非常基础的技能。在HTML中,我们可以用多种方式来设置页面的背景,包括纯色背景、图片背景、重复背景、平铺背景以及渐变背景等。下面我将介绍如何使用这些方式来设置HTML页面的背景。纯色背景纯色背景是最简单的背景类...
    99+
    2023-05-14
  • 深入浅析Java中的方法重写
    深入浅析Java中的方法重写?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、方法重写(Override)    &nb...
    99+
    2023-05-31
    java 方法重写 ava
  • 如何浅析Fedora 7的Linux嵌入式
    这篇文章将为大家详细讲解有关如何浅析Fedora 7的Linux嵌入式,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。下面就这个问题来详细说说Linux嵌入式。这里,需要利用内核nfs功能,将...
    99+
    2023-06-17
  • 浅析JavaScript中的操作符与表达式
    1.表达式1.1原始表达式3.14 //数字直接量 "hello world" //字符串直接量 /pattern/ //正则表达式直接量 true //返回一个布尔值: 真 false //返回一个布尔值:...
    99+
    2022-11-22
    javascript
  • php如何将二维数组写入文件(方法浅析)
    PHP 是一种非常流行的脚本语言,它通常用于开发 Web 应用程序。在 PHP 中,我们经常需要将数据写入文件中。而对于一个二维数组,比如多维关联数组,如何将其写入到文件中呢?在这篇文章中,我们将学习如何在 PHP 中将二维数组写入文件。在...
    99+
    2023-05-14
  • 如何浅析.NET写入文本文件的操作
    这篇文章将为大家详细讲解有关如何浅析.NET写入文本文件的操作,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。.NET写入文本文件的操作时需要注意注意  Visual Basic 用...
    99+
    2023-06-17
  • JavaScript的书写方式有哪些
    这篇文章主要介绍“JavaScript的书写方式有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript的书写方式有哪些”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • 如何浅析XML节点类型种类及作用
    这篇文章将为大家详细讲解有关如何浅析XML节点类型种类及作用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。当将XML文档作为节点树读入内存时,这些节点的节点类型在创建节点时确定。XML 文档...
    99+
    2023-06-17
  • 浅谈JavaScript的几种继承实现方式
    目录当前需求: 实现 Student 继承自 Person构造函数Person构造函数Student希望满足的条件功能利用原形链实现方法的继承方式1: 子类原型指向父类原型方式2 子...
    99+
    2023-05-17
    JavaScrip 继承
  • 如何分析Javascript类型转换
    今天就跟大家聊聊有关如何分析Javascript类型转换,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript是什么JS是JavaScript的简称,它是一种直译式的脚本...
    99+
    2023-06-26
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作