ECMA-262 V7.0 中关于对象的概述

Python自动化:3分钟搞定微信收藏链接批量导出到TXT(附完整代码) 本文介绍如何使用Python自动化工具在3分钟内将微信收藏链接批量导出到TXT文件。通过模拟人类操作和OCR技术,脚本高效处理大量链接,显著提升工作效率,并附有完整代码和实战避坑指南。 阅读详情

ECMA-262 V7.0 中关于对象的概述

译者目前在做前端,博客内容主要是文档翻译。如果读者希望我翻译某些和前端相关的文档,欢迎留言告诉我。对于已有在网络上能够搜到质量较高译文的文章,我就不做重复工作了。本人精力有限,翻译质量达不到出版书籍的程度,可能有些人看不懂,不过我相信这总会帮助到一些人。有空的时候我会返回来对之前的文章进行润色。

原文:http://www.ecma-international.org/ecma-262/7.0/#sec-objects

尽管ECMAScript包含了用于定义类的关键字,但ECMAScript并不像C++、SmallTalk和Java那样是从根本上基于类的。相应的,对象可以被通过多种方式创建包括:字面声明、构造函数(创建对象然后执行代码初始化对象的全部或部分属性)等。每个构造器都是一个含有叫做prototype的属性的函数。prototype用于实现原型继承和属性共享。对象通过在new表达式中使用构造函数被创建,例如:new Date(2009,11) 创建一个新的Date对象。调用构造函数而不使用new关键字的结果和构造函数本身有关。例如,Date()产生一个表示当前日期和时间的字符串而不是一个对象。

每一个被创建的对象有一个对其构造函数的prototype属性的隐式引用(叫做对象的原型)。此外,一个原型可能有一个对它原型的非null的隐式引用,并且持续下去。这被叫做原型链。当我们引用对象的一个属性时,会引用原型链中第一个拥有相同属性名字的对应属性。换句话说,首先检查当前对象是否有我们想要的属性;如果有则获取该属性的引用;如果没有则去这个对象的原型中查找,如此下去。
图1
图1
一般来说,在一个基于类的面向对象语言中,状态是由实例提供的,方法是由类提供的,继承仅仅对于结构和行为。在ECMAScript中,状态和方法是由对象提供的,结构、行为和状态都会被继承。

如果对象的原型共享了某一属性和它的值,那么这个对象不会直接包含这个属性。图1指出:

与大多数基于类的面向对象语言不同的是,属性可以通过赋值的方式被动态添加给对象。也就是说,构造函数不需要给被创建对象的所有属性命名或赋值。上图中,我们可以通过给原型CFp注册新值来为cf1、cf2、cf3、cf4和cf5共享属性。

尽管ECMAScript不是天生基于类的,但通过构造函数、原型对象和方法这种通用的模式来定义类似类的抽象概念通常是合适的。ECMAScript的内建对象自身遵守了这样一个类似类的模式。从ECMAScript 2015开始,ECMAScript包含了定义类的语法来让开发者通过和内置对象的类似类的抽象模式相一致的方式类定义对象。

我的看法:
1、ES并不直接支持类和它的概念但却提供了一个类似的概念: 先来看看ES与其他面向对象语言(C++,java,c#等)关于类概念的区别,有两点,如文中所说:1、其他面向对象语言中类的实例提供了状态(既属性),类提供了方法。我们对一个对象调用方法时是掉用类定义中的方法,将其运行上下文设置为当前对象。同一类的实例调用的是同一组方法(在概念上和实现上皆是如此)。也就是说实例(数据集)是分别存储的,方法存储在它的类定义里面。但在ES中对象(数据集)和方法都是存在实例中的。2、其他面向对象语言继承的是结构和行为,结构是指对象的内容如何解释,行为就是方法。一个类的实例在内存中具备一块完全的独立空间,这个空间中包含这个类及其所有祖先类的所有属性的存储空间。我们新建一个这个类的实例,他们互不干扰,从祖先类到子类所有数据属性都是独立的。在ES中不是这样,它继承的是状态、结构和方法。既数据、如何解释数据和方法。这意味着如果两个对象具有相同的原型对象,那么对原型对象的修改会同时影响到这两个对象。
所以我认为在ES中不存在类而仅仅存在对象,这不违背ES是面向对象的这一特点,面向对象不一定要有类。ES中继承的是对象而不是类,方法是属于对象的不是属于类的。ES中对象的继承是树形关系。在其他面向对象语言对象是独立的,类的继承是树形关系。
2、构造函数是对象的生成器而不是对象的类型:
文中指出构造函数用来初始化对象属性(也可以之后动态添加),构造函数的’prototype’会作为对象的原型。但不理解为对象的构造函数是它的类型,因为对象可以被动态修改属性,如果一个对象的构造函数是它的类型,当人们对它添加一个新的属性时它的类型是什么呢。

ThingsBoard 3.1.1版本在window本地运行之TB-Gateway服务搭建(三) TB-gateway服务是TB不可或缺的部分,很多的协议都需要TB-gateway来做分类处理,今天我们就来做TB-Gateway服务搭建。 阅读详情

相关推荐

ENVI5.6+SARscape实战:基于哨兵一号的PS与SBAS时序InSAR地表形变监测全流程解析

本文详细解析了使用ENVI5.6和SARscape软件基于哨兵一号数据进行PS与SBAS时序InSAR地表形变监测的全流程。从数据获取、预处理到PS-InSAR和SBAS-InSAR处理,提供了实用技巧和优化建议,帮助用户高效完成地表形变监测任务。

weixin_29245767的博客 1154

ECMA-262 5.1 Edition中关于对象的创建

ECMA-262 5.1 Edition中关于对象的创建 在ECMA-262 5.1 Edition的开始部分描述了关于对象的创建,它是这样描述的: ECMAScript does not use classes such as those in C++, Smalltalk, or Java. Instead objects may be created in various ways

siege 625

编程_三大编程思想:POP、OOP、AOP

简单介绍POP、OOP、AOP三大编程思想的区别和优缺点~

mikimo的博客 3896

ECMAScript创建对象2 —— 原型模式

原型对象的概念 ECMAScript中,用户每创建一个新函数,都会根据一组特定的规则给这个函数创建一个prototype属性,它指向这个函数的原型对象,这个原型对象包含了这个函数所有实例共享的属性和方法。这里就解决了构造函数模式所存在的最大的问题。 构造函数、原型对象、实例之间的关系 构造函数的prototype属性指向原型对象,原型对象的constructor属性指向构造函数; 实例的有一个指针指向原型对象,ECMA-262第五版中叫做[[prototype]],在Firefox、chorme、..

muzimiaomiaopeng的博客 281

阿里云Windows服务器部署网站全流程:从IIS配置到安全上线

Web服务器是承载网站应用、处理HTTP请求的核心软件。其工作原理是监听特定网络端口,接收客户端请求,并返回相应的网页、文件或动态生成的内容。在Windows Server环境中,IIS(Internet Information Services)作为微软官方Web服务器,凭借其与操作系统深度集成、图形化管理界面和对ASP.NET等微软技术栈的良好支持,成为许多开发者和运维人员的首选。其技术价值在于提供了稳定、可扩展的托管平台,支持从简单的静态网站到复杂的企业级Web应用。在云服务器普及的今天,将IIS部署

weixin_33552698的博客 327

详细了解sklearn中的CountVectorizer

CountVectorizer 是 scikit-learn(一个流行的 Python 机器学习库)中的一个文本特征提取类,其核心功能是将一系列原始文本(如句子、文档)转换为基于词频(word count)的数值矩阵。它基于词袋模型(Bag of Words, BoW)思想,忽略文本的语法结构和词序,仅关注词汇在文本中出现的频率,从而将文本转化为机器可理解的数字形式。文本 1:"I love machine learning"

2302_76568160的博客 1119

ECMA-262 V7.0 中关于数据类型和值的说明

原文 http://www.ecma-international.org/ecma-262/7.0/index.html#sec-ecmascript-data-types-and-values6 ECMAScript数据类型和值这篇规范中的算法操作的每一个值都有一个对应的类型。在这节中给出所有可能的类型的明确定义。类型进一步被分为ECMAScript语言类型和规范类型。术语empty用来表示没有任

ruojianll的博客 975

手把手教你在Keil/IAR中移植SEGGER_RTT组件(避坑指南+性能对比)

本文详细介绍了在Keil/IAR开发环境中移植SEGGER RTT调试组件的完整流程与优化技巧。通过对比传统串口调试,SEGGER RTT凭借零硬件占用、高速传输和双向交互等优势,显著提升嵌入式开发效率。文章包含配置步骤、性能调优方案及常见问题解决方案,是嵌入式开发者必备的实用指南。

y7z8a的博客 243

为什么 JS 对象内部属性遍历的顺序乱了

问题重现 需求是要获取一个车型列表,并且输出到页面上按年份排序,故而接口提供的对象简化如下 let obj = { '2018': { modelCode: "204313", modelName: "2018款 Vanquish 6.0L S Coupe" }, '2017': { modelCode: "202479", modelName: "2017款 Rapide 6.0L AMR" },

高先生的猫 3538

3D高斯溅射融合Gabor滤波器:频率感知如何提升神经渲染效率与质量

在计算机视觉与图形学领域,3D场景重建旨在从多视角图像中恢复真实世界的三维结构与外观。其核心原理是通过优化场景表示,使渲染出的二维图像与输入照片尽可能一致。传统方法在效率与细节保真度间常面临权衡,高频细节(如精细纹理、锐利边缘)的重建尤为消耗算力。频率感知技术为此提供了突破方向,它借鉴信号处理思想,将场景分解为不同空间频率的成分进行针对性建模。Gabor滤波器作为经典的频率-方向分析工具,能有效刻画纹理的局部频域特征。将Gabor的频率选择性与3D高斯溅射(3DGS)这一高效显式表示结合,构成了神经Gabo

weixin_33087827的博客 272

网络攻防实验——网络监听

利用CAIN实现ARP监听。

Trieyes_of_feng的博客 3197

ECMA-262 V7.0 中关于反射的描述

26 反射26.1 反射对象反射对象是%Reflect%固有对象并且是全局对象的Reflect属性的初始值。反射对象是普通对象(ordinary object)。反射对象的[[Prototype]]内部槽的值是%ObjectPrototype%固有对象。反射对象不是函数对象。它不具备[[Construct]]内部方法,不可以把反射对象用作new操作符的构造器。反射对象也不具备[[Call]]内部方法

ruojianll的博客 737

Pointnet++环境配置(Windows11和ubuntu)及训练教程

PS:前两行命令是数据处理的命令,主要是进行数据读取和生成相应的训练数据格式,在Ubuntu上是正常运行的,在Windows上运行会失败,无法生成训练用的数据格式,所以最好在Ubuntu上训练,如果一定要用Windows,可以ubuntu上生成数据格式在导到Windows上,数据生成不需要安装torch。通过anaconda配置的环境,在官网找的命令安装的,版本是2.1.0+cu118。训练命令:我使用的pycharm,直接在pycharm中打开终端,运行命令。Python版本:3.7。

AIcurator的博客 2558

ECMA-262(11th Edition) 5.1 Notational Conventions

ECMA-262-5-Notational Conventions文章翻译与相关名词解释读懂第五章需要了解的知识5.1 Syntactic and Lexical Grammars5.1.1 context-free grammar5.1.2 The Lexical and RegExp Grammars5.1.3 The Numeric String Grammar5.1.4 The Syntactic Grammar5.1.5 Grammar Notation 文章翻译与相关名词解释 读懂第五章需要了解

Koromi的博客 624

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ECMAscript和Javascript的区别

ECMAscript VS JavaScript 刚开始学习js的时候很困惑,一些论坛网站书本会提到ECMAscript和ES5/6等字眼,这个东西跟我学习的js有什么关系吗?当时我怀疑我学习的js是过时的js,如同我刚学pthon的时候,大家都转py3,而我却浑然不知还在py2上发力。 基于这个前提,在学习javascript之前,我们先搞清楚ECMAscript和javascript的区别和历史渊源。 ECMAscript 和ECMA International ECMA International是一

蓝色的天空的博客 1738

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

IE兼容事件绑定V1.0

想要兼容IE678,少用原型,因为它们没有完全实现ECMA-262规范 1 (function(window){ 2 //兼容IE678时少用原型,因为它没有完全遵循ECMA-262规范 3 4 //衬垫代码:isArray方法的兼容方案 5 if (!Array.isArray) { 6 Array.isArray ...

weixin_30463341的博客 87

js如何判断一个对象是不是Array?

在开发中,我们经常需要判断某个对象是否为数组类型,在Js中检测对象类型的常见方法都有哪些呢? 1.typeof 操作符 对于Function, String, Number ,Undefined 等几种类型的对象来说,他完全可以胜任,但是为Array时: var arr=new Array("1","2","3","4","5"); alert(typeof(arr)); 你会收到一个...

yanner_的博客 261

JS引擎-- Chrome V8 引擎入门

link:http://www.cnblogs.com/liuning8023/archive/2012/11/03/2752761.html https://developers.google.com/v8/intro   本文内容 介绍关于 V8 引擎V8 引擎入门参考资料   介绍 V8 是 Google 开源的、高性能的 JavaScript

xyqzki的专栏 1万+

js引擎v8源码解析之对象第一篇(基于v8 0.1.5)

v8的对象基类是Object。我们先看一下他的类定义。下面只列出重要的函数。 // Object is the abstract superclass for all classes in the // object hierarchy. // Object does not use any virtual functions to avoid the // allocation of the C...

标子 的专栏 741

ECMAScript和JavaScript的区别

1、ECMAScript的简介 ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,所以它可以理解为是JavaScript的一个标准,但实际上后两者是ECMA...

pan_junbiao的博客 1万+

DS.Lab筆記 - ECMA-262-3: ECMAScript对于面向对象语言功能的实现

原文鏈接:ECMA-262-3 in detail. Chapter 7.2. OOP: ECMAScript implementation. ============================================================= 数据类型(Data types) ECMAScript标准定义了六种可以在代码中直

Vincent's Tech Blog 910

ECMA262 词法约定

winter 发了篇 javascript 词法,的总结帖:http://www.cnblogs.com/winter-cn/archive/2012/04/17/2454229.html 我就借花献佛的把,自己的注解笔记也放出来吧. 做个参考 (不过依然是格式问题,懒得整理了.evernote里贴过来总是这么郁闷) 词法 ECMAS...

weixin_30929011的博客 133

js引擎v8源码解析之map对象上篇(基于v8 0.1.5)

这一篇首先介绍Map类。下面先看类定义 // All heap objects have a Map that describes their structure. // A Map contains information about: // - Size information about the object // - How to iterate over an object (fo...

标子 的专栏 913

day028: 能不能实现数组filter方法 ?

ECMA262规范如下:代码如下:Array.prototype.filter = function(callbackfn, thisArg) { // 处理数组类...

杨兴元的博客 222

Introduction to JScritp.NET(2)

这一部分是来于MSDN2.主要谈的是定义JScript8.0到底是什么!(其实在MSDN2上vs2008与vs2005关于JScript的文章内容基本一样,只是在VS2008中将JScript.net更改为JScript8.0,同时还将新增加的特性列举在文章里面以后我会介绍) (1)What is JScript8.0? (2)New Features (3)What New in...

denghuaken9487的博客 98

v8-tc39-ecma262:concat,不只是合并数组

v8-tc39-ecma262:concat,不只是合并数组

junjiahuang的博客 138

颠覆认知的『JavaScript』篇——01【发展史、ECMA、编程语言、变量、JS值】

一、发展史 1. 主流浏览器以及内核 IE trident chrome webkit blink Firefox gecko opera presto safari webkit 2. 浏览器的历史 1. 1990 年浏览器的诞生,蒂姆伯纳斯李 超文本分享资讯的人,将world wide web 移植到C libwww/nexus。意义是允许别人浏览他人编写的网站 ...

Mr_ZJQ的博客 1534
上一篇: CSS第三级选择器 Selectors Level 3 文档翻译
下一篇: ECMA-262 V7.0 中关于数据类型和值的说明
若简LL
博客等级 码龄11年 8粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值