首页 > 编程语言 >JavaScript类

JavaScript类

时间:2023-06-22 17:22:51浏览次数:38  
标签:对象 JavaScript 实例 原型 构造函数 属性

1 JavaScript类

  • 每个JavaScript对象都是一个属性集合,相互之间没有任何联系
  • 在JavaScript中也可以定义对象的类
    • 让每个对象都共享某些属性,这种“共享”的特性是非常有用的
      • 类的成员或实例都包含一些属性,用以存放或定义它们的状态
      • 其中有些属性定义了它们的行为(通常称为方法)。这些行为通常是由类定义的,而且为所有实例所共享
    • 在JavaScript中,类的实现是基于其原型继承机制的。如果两个实例都从同一个原型对象上继承了属性,我们说它们是同一个类的实例
    • 如果两个对象继承自同一个原型,往往意味着(但不是绝对)它们是由同一个构造函数创建并初始化的

2 类和原型

  • 在JavaScript中,类的所有实例对象都从同一个原型对象上继承属性。因此,原型对象是 类的核心
  • 如果定义一个原型对象,然后创建一个继承自它 的对象,这就定义了一个JavaScript类
  • 类的实例还需要进一步的初始化,通常是通过定义一个函数来创建井初始化这个新对象
//使用工厂的方法创建对象:返回使用new创建的对象
function inherit(p){
    if(p == null) throw TypeError();
    if(Object.create) return Object.create(p);
    if(typeof p!== 'object'&&typeof p!=='function') throw ypeError();
    function f(){}
    f.prototype = p;
    return new f();
}

//使用工厂方法创建一个对象
function range(from,to){
    var r = inherit(range.methods);
    //这两个属性是不可以被继承的,因为它们不是创建在对象的原型上
    r.from = from;
    r.to = to;

    return r;
}

//在range.methods中定义的那些可共享、 可继承的方法都用到了from和to属性, 而且使用了this关键字,

//为了指代它们, 二者使用this关键字来指代调用这个方法的对象。 任何类的方法都可以通过this的这种基本用陆来读取对象的属性。

range.methods = {
    //如果x在范围内,贝Jj返回true,否则返回false
    //这个方法可以比较数字范围,也可以比较字符串和日期范围
    includes: function (x) { 
        return this.from<= x && x <= this.to;
    }, 
    //对于范围内的每个整数都调用一次f(x),这个方法只可用做数字范围
    foreach: function (f) {
        for (var x = Math.ceil(this.from); x <= this.to; x++) f(x);
    },
}

var r = range(1,3);
r.includes(2); 

3 类和构造函数

  • 在JavaScript中,使用工厂方法定义类不常用
  • 在JavaScript中, 推荐使用构造函数来定义类,构造函数是用来初始化新创建的对象的
    • 使用关键字new来调用构造函数会自动创建一个新对象, 因此构造函数本身只需初始化这个新对象的状态即可
    •  使用关键字new来调用构造函数的一个重要特征是, 构造函数的prototye属性被用做新对象的原型。 这意味着通过同一个构造函数创建的所有对象都继承自一个相同的对象, 因此它们都是同一个类的成员
//构造函数
function Range(from,to){
    //这两个属性是不可以被继承的,因为它们不是创建在对象的原型上
    this.from = from;
    this.to = to;
}
//在range.methods中定义的那些可共享、 可继承的方法都用到了from和to属性, 而且使用了this关键字,
//为了指代它们, 二者使用this关键字来指代调用这个方法的对象。 任何类的方法都可以通过this的这种基本用陆来读取对象的属性。
Range.prototype = {
    //如果x在范围内,贝Jj返回true,否则返回false
    //这个方法可以比较数字范围,也可以比较字符串和日期范围
    includes: function (x) { 
        return this.from<= x && x <= this.to;
    }, 
    //对于范围内的每个整数都调用一次f(x),这个方法只可用做数字范围
    foreach: function (f) {
        for (var x = Math.ceil(this.from); x <= this.to; x++) f(x);
    },
}

var r = new Range(1,3);
r.includes(2); 

3.1 构造函数和类的标识

  • 原型对象是类的唯一标识:当且仅当两个对象继承自同一个原型对象时, 它们才是属于同一个类的实例
  • 初始化对象的状态的构造函数则不能作为类的标识,只有两个构造函数的prototype属性指向同一个原型对象,那么这两个构造函数创建的实例是属于同一个类的
  • 尽管构造函数不像原型那样基础, 但构造函数是类的外在表现 。很明显的,构造函数的名字通常用做类名。更根本地讲,当使用instanceof运算符来检测对象是否属于某个类时会用到构造函数。实际上instanceof运算符并不会检查实例是否是由构造函数初始化而来,而会检查实例是否继承自构造函数的prototype, 不过,instanceof的语法则强化了“构造函数是类的公有标识”的概念

标签:对象,JavaScript,实例,原型,构造函数,属性
From: https://www.cnblogs.com/cqycb720930/p/17498022.html

相关文章

  • Javascript
    什么是Javascript概述javaScript是一门世界上最流行的脚本语言Java,JavaScript10天一个合格的后端人员,必须精通JavaScript历史ECMAScript它可以理解为JavaScript的一个标准最新版本已经到es6版本~但是大部分浏览器还只停留在支持es5代码上!开发环境–线上环境,版本不一致......
  • iOS开发笔记 - Objective-C和JavaScript的混编
    最近看了一个对Github上面编程语言使用统计的排行榜,JavaScript真可以说是一枝独秀,很难想象20年前,这个语言只是浏览器中的装饰性语言,能做的事情也就是一点特效或者检查一下要提交给服务器的表单是否满足要求。今天的JavaScript已经是一个全栈语言,从客户端到服务器无所不在。很多编程......
  • javascript WebUploader 分块上传
    ​ 前言文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。那有没有......
  • JavaScript异步编程:异步的数据收集方法
    我们先尝试在不借助任何工具函数的情况下来解决这个问题。笔者能想到的最简单的方法是:因前一个readFile的回调运行下一个readFile,同时跟踪记录迄今已触发的回调次数,并最终显示输出。下面是笔者的实现结果。Asyncjs/seriesByHand.jsvarfs=require('fs');process.chdir('recipes'......
  • JavaScript版本的策略模式
    俗话说,条条大路通罗马。在美剧《越狱》中,主角MichaelScofield就设计了两条越狱的道路。这两条道路都可以到达靠近监狱外墙的医务室。同样,在现实中,很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路。如果没有时间但是不在乎......
  • JavaScript王国里的鸭子合唱团
    编程语言按照数据类型大体可以分为两类,一类是静态类型语言,另一类是动态类型语言。静态类型语言在编译时便已确定变量的类型,而动态类型语言的变量类型要到程序运行的时候,待变量被赋予某个值之后,才会具有某种类型。静态类型语言的优点首先是在编译时就能发现类型不匹配的错误,编辑......
  • 10个具体项目生动精彩讲述JavaScript;超级Web应用,构建不再困难
     “JavaScript,就是那种小时候长得很丑,长大了却谁都想要的孩子。”诞生初期,由于很多所谓的“资深”程序员的滥用,让这个孩子饱受质疑,直到前几年DOM技术开始崛起,JavaScript才逐渐恢复了曾经的兴盛。并且,这时的JavaScript更多了一份成熟,少了一缕稚气。JavaScript虽然已经被当......
  • 活学活用流行的JavaScript库——《JavaScript实战》
    媒体评论“本书并不像一本教材,畅读之后,你会觉得它就是一位讲课生动的老师,带领你遨游JavaScript海洋,把你推向技术风浪的前沿,同时又给了你一个功能完备的冲浪板,接下来就是你在风口浪尖上享受JavaScript高潮的时候了。”                  ......
  • JavaScript(05): 正则表达式
    当检索某个文本的时候,我们可能需要一种模式来描述被检索的内容,在这种情况下就可以考虑使用正则表达式。正则表达式可以定义一种模式,这种模式可能是一个简单的字符、也可能是一个非常复杂的字符串,通常被用于解析、格式检查、替换等。关于正则表达式的具体内容可以参考以下链接,本文只......
  • JavaScript(02): ECMAScript基础
    ECMAScript提供了实现通用程序设计任务必需的JavaScript的语法、运算符和基本对象。1.语法ECMAScript借用了Java、C等语言的语法,对于熟悉这些语言的开发者掌握ECMAScript的语法应该是非常容易的。区分大小写变量是弱类型:定义变量时只用var关键字并且可以将变量初始化为任意值每行......