Object对象

原文地址:https://wangdoc.com/javascript/
JavaScript原生提供Object对象。JavaScript的所有其他对象都继承自Object对象,即都是Object的实例。Object对象的原生方法分为两类:Object本身的方法与Object的实例方法。
Object对象本身的方法
所谓本身的方法就是直接定义在Object对象的方法。

Object.print = function (o) {console.log(o);
};

上面代码中,print就是直接定义在Object对象上。
Object的实例方法
所谓实例方法就是定义在Object原型对象Object.prototype上的方法。它可以被Object实例直接使用。

Object.prototype.print = function() {console.log(this);
};
var obj = new Object();
obj.print() //Object

上面代码中,Object.prototype定义了一个print方法,然后生成一个Object的实例objobj直接继承了Object.prototype的属性和方法,可以直接使用obj.print调用print方法。也就是说,obj对象的print方法实质上就是调用Object.prototype.print方法。

Object()

Object本身是一个函数,可以当作工具方法使用,将任意值转为对象。这个方法常用于保证某个值一定是对象。
如果参数为空(或者为undefined和null),Object()返回一个空对象。
instanceof运算符用来验证,一个对象是否为指定的构造函数的实例。obj instanceof Object返回true,就表示obj对象是Object的实例。

var obj = Object(1);
obj instanceof Object; // true
obj instanceof Number; // truevar obj = Object("foo");
obj instanceof Object; // true
obj instanceof String; // truevar obj = Object(true);
obj instanceof Object; // true
obj instanceof Boolean; // true

上面代码中,Object函数的参数是各种原始类型的值,转换成对象就是原始类型值对应的包装对象。
如果Object方法的参数是一个对象,它总是返回该对象,即不用转换。

var arr = [];
var obj = Object(arr); // 返回原数组
obj === arr // true

利用这一点,可以写一个判断变量是否为对象的函数。

function isObject(value) {return value === Object(value);
}

Object构造函数

Object不仅可以当作工具函数使用,还可以当作构造函数使用,即前面可以使用new命令。Object构造函数的首要用途是直接用它来生成新对象。
Object构造函数的用法与工具方法很相似,几乎一模一样。使用时,可以接受一个参数,如果该参数是一个对象,则直接返回这个对象;如果是一个原始类型的值,则返回该值对应的包装对象。
虽然很相似,但是Object(value)new Object(value)两者的语义是不同的,Object(value)表示将value转成一个对象,new Object(value)则表示新生成一个对象,它的值是value

Object的静态方法

所谓静态方法,是指部署在Object(value)对象自身的方法。

Object.keys(),Object.getOwnPropertyNames()

Object.keys方法和Object.getOwnPropertyNames方法都用来遍历对象的属性。Object.keys方法的参数是一个对象,返回一个数组。该数组的成员都是该对象自身的(而不是继承的)所有属性名。
Object.getOwnPropertyNames方法和Object.keys类似,也是接受一个对象作为参数,返回一个数组,包含了该对象自身的所有属性名。
对于一般的对象来说Object.keys()Object.getOwnPropertyNames()返回的结果都一样。只有涉及不可枚举属性是,才会有不一样的结果。Object.keys方法只返回可枚举的属性,Object.getOwnPropertyNames方法还返回不可枚举的属性名。

var a = ["hello", "world"];
Object.keys(a) // ["0", "1"]
Object.getOwnPropertyNames(a) // ["0", "1", "length"]

其他方法

除了上面提到的两个方法,Object还有不少其他静态方法。
(1)对象属性模型的相关方法

  • Object.getOwnPropertyDescriptor():获取某个属性的描述对象。
  • Object.defineProperty():通过描述对象,定义某个属性。
  • Object.defineProperties():通过描述对象,定义多个属性。
    (2)控制对象状态的方法
  • Object.preventExtensions():防止对象扩展。
  • Object.isExtensible():判断对象是否可扩展。
  • Object.seal():禁止对象配置。
  • Object.isSealed():判断一个对象是否可配置。
  • Object.freeze():冻结一个对象。
  • Object.isFrozen():判断一个对象是否被冻结。
    (3)原型链相关方法
  • Object.create():该方法可以指定原型对象和属性,返回一个新的对象。
  • Object.getPropertyOf():获取对象的Prototype对象。

    Object的实例方法

    除了静态方法,还有不少方法定义在Object.prototype对象。它们称为实例方法,所有Object的实例对象都继承了这些方法。
    Object实例对象的方法,主要有以下六个。
  • Object.prototype.valueOf():返回当前对象对应的值。
  • Object.prototype.toString():返回当前对象对应的字符串形式。
  • Object.prototype.toLocaleString():返回当前对象对应的本地字符串形式。
  • Object.prototype.hasOwnProperty():判断某个属性是否为当前对象自身的属性,还是继承自原型对象的属性。
  • Object.prototype.isPrototypeOf():判断当前对象是否为另一个对象的原型。
  • Object.prototype.propertyIsEnumerable():判断某个属性是否可枚举。

    Object.prototype.valueOf()

    valueOf方法的作用是返回一个对象的值,默认情况下返回对象本身。

    Object.prototype.toString()

    toString方法的作用是返回一个对象的字符串形式,默认情况下返回类型字符串。
var o1 =  new Object();
o1.toString() // "[object Object]"

上面代码会返回字符串[object Object],该字符串说明对象的类型。
字符串[object Object]本身没有太大的用处,但是通过自定义toString方法,可以让对象在自动类型转换是,得到想要的字符串形式。
数组、字符串、函数、Date对象分别部署了自定义的toString方法,覆盖了Object.prototype.toString方法。

toString()的应用:判断数据类型

Object.prototype.toString方法返回对象的类型字符串,因此可以用来判断一个值得类型。上面空对象调用toString返回的字符串object Object,其中第二个Object表示该值的构造函数。
由于实例对象可能会自定义toString方法,覆盖掉Object.prototype.toString方法,所以为了得到类型字符串,最好直接使用Object.prototype.toString方法。通过函数的call方法调用。

  • 数值:返回[object Number]
  • 字符串:返回[object String]
    ...
    利用这个特性,可以写出一个比typeof运算符更准确的类型判断函数。
var type = function(o) {var s = Object.prototype.toString.call(o);return s.match(/\[object (.*?)\]/)[1].toLowerCase();
}

Object.prototype.toLocaleString()

Object.prototype.toLocaleString方法与toString返回结果相同,也是返回一个值得字符串形式。这个方法的主要作用是留出一个接口,让各种不同的对象实现自己版本的toLocaleString,用来返回针对某些地域的特定的值。
目前主要有三个对象自定义了toLocaleString方法。

  • Array.prototype.toLocaleString()
  • Number.prototype.toLocaleString()
  • Date.prototype.toLocaleString()
    举例来说,日期的实例对象的toStringtoLocaleString返回值就不一样,而且toLocaleString的返回值跟用户设定的所在地域有关。

    Object.prototype.hasOwnProperty()

    Object.prototype.hasOwnProperty方法接受一个字符串作为参数,返回一个布尔值,表示该实例对象自身是否有该属性。
var obj = {p: "123",
};obj.hasOwnProperty("p"); // true
obj.hasOwnProperty("toString"); // false

上面代码中,对象obj自身具有p属性。toString属性是继承来的。

转载于:https://www.cnblogs.com/chris-jichen/p/10043589.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派超声波模块测距

参考:树莓派超声波模块测距及C语言demo 作者:一只青木呀 发布时间: 2020-07-22 16:54:16 网址:https://blog.csdn.net/weixin_45309916/article/details/107516949 前面这篇博文已经讲过了:树莓派外设开发基础&#xf…

spring cloud (一、服务注册demo_eureka)

首先我的博客记理论知识很少,大家对spring boot、spring cloud 、分布式 、微服务什么的一点概念都没有的还请先去百度看看理论,知道了是做什么用的,然后再写下demo ,这样学起来才没有那么迷糊! 我一般写下的demo都是我踩了很多坑…

JavaFX 的 UI 控件集 ControlsFX

出处:http://www.oschina.net/p/controlsfx JavaFX 的 UI 控件集 ControlsFX ControlsFX 开源项目旨在为 JavaFX 开发提供更多的 UI 控件和其他工具。 该项目主要针对JavaFX 8.0(捆绑在JDK 8中),考虑到JavaFX中已经包含了一些控件…

c语言link错误什么原因,C语言 OpenCV错误:“LINK:致命错误LNK1104:无法打开文件’opencv_core231d.lib’”...

我正在尝试在visual studio opencv中编译一个简单的代码,但是遇到了这个错误.码:#include #include using namespace cv;int main ( int argc, char **argv ){Mat im_gray;Mat img_bw;Mat img_final;Mat im_rgb imread("001.jpg");cvtColor(im_rgb,im_gr…

shell 脚本编写使用

目录一、什么是shell 脚本二、shell 脚本写法三、shell 脚本语法1、第一个 shell 脚本2、read命令3、数值计算4、test命令5、中括号判断符6、默认变量7、条件判断8、函数9、循环一、什么是shell 脚本 终端中输入一系列命令完成一些操作,但是我们一条一条输入命令&a…

javaweb开发之处理表单上传文件和文件下载

2019独角兽企业重金招聘Python工程师标准>>> 一、基于表单的上传文件 1. enctype属性 当表单需要上传文件时,需指定表单 enctype 的值为 multipart/form-data。 在 form 元素的语法中,enctype 属性指定将数据发送到服务器时浏览器使用的编码…

单片机预备知识(电平、进制转换、字节、数据类型)

参考:郭天祥十天带你精通51单片机 网址:https://www.bilibili.com/video/BV1DW411a7mz/?spm_id_from333.788.videocard.0 目录电平特性二进制进制转换1K字节等于多少字节基本数据类型电平特性 二进制 进制转换 也可参考这篇:进制问题和C语言…

c语言程序设计王新萍课后答案,C语言程序设计教程

C语言程序设计教程出版时间:2010年12月定  价:29.80I S B N :9787121116322所属分类:标  签:计算机技术 电子电脑 程序与语言本书由多年从事C语言教学的教师编写。全书共分11章,主要内容包括&#xf…

vue之filter用法

1、全局写法: 全局过滤器必须写在vue实例创建之前。 Vue.filter(testfilter, function (value,text) {// 返回处理后的值return valuetext}) 2、局部写法: 在组件实例对象里挂载。 filters: {changemsg:(val,text)>{return val text}}, 3、使用&…

[summary] 单调队列

2019独角兽企业重金招聘Python工程师标准>>> 很久没做单调队列了╮(╯_╰)╭ 已经不太会了.... 单调队列究其本质就是队列,加上队尾可以删除. 队列都是从队尾插入,队首输出.单调队列也一样. 以队尾到队首递增的单调队列为例,我们需要保证队列的单调性,所以当插入一…

判断同构数 c语言,基于visual Studio2013解决C语言竞赛题之0413同构数

JQuery的基础和应用1.什么是? DOM的作用:提供了一种动态的操作HTML元素的方法. jQuery是一个优秀的js库.用来操作HTML元素的工具. jQuery和DOM ...tomcat 8在win8.1中的配置配置jdk: 三个步骤: 1.环境变量>新建 JAVA_HOME C:\Program Files\Java\jdk1.…

段错误的调试方法(printf输出、GDB)

参考:段错误产生原因及简单的调试方法 参考:如何解决段错误 参考:C语言gdb调试之精髓(常用命令、多进程、多线程、程序日志) 网址:https://www.bilibili.com/video/BV1ei4y1V758?fromsearch&seid40373…

Sparse Feature Learning

1. learn feature from sparse codes (source codes) : http://homes.cs.washington.edu/~lfb/ 2. parse scene(source codes):http://www.cs.illinois.edu/homes/slazebni/转载于:https://www.cnblogs.com/stoneresearch/p/4336332.html

c语言中error c2601,C 语言   dd.cpp(46) : error C2601: 'main' : local function definitions are illegal...

C 语言 dd.cpp(46) : error C2601: main : local function definitions are illegal0#include#includestruct phone{int num;int count;};int convet(char *p){ int i;for(i0;*p!\0;p){switch(*p){ case A:case B:case C:{p[i]2;i;continue;}case D:case E:case F:{p[i]3;i;c…

STM32使用IIC总线通讯协议在OLED屏幕上显示字符串、汉字、单总线获取DHT11模块温湿度并通过IIC显示到屏幕(软件IIC)

参考:基于stm32软件IIC的oled显示温湿度 作者:ZPZ DayUp 发布时间: 2021-07-25 20:52:43 网址:https://blog.csdn.net/m0_56197680/article/details/119077076?spm1001.2014.3001.5501 目录软件模拟IIC时序(起始、停止、应答、发…

区块链:定义未来金融与经济新格局

区块链:定义未来金融与经济新格局 1 区块链是什么 区块链的本质 区块链的本质是一种去中心化的记账系统,区块链与比特币之间的关系就是凯恩斯所说的记账货币与货币之间的关系,区块链是一套由信用记录以及信用记录的清算构成的体系。共识机制与价值载体 共…

Linux出现NOKEY

rpm --import /etc/pki/rpm-gpg/RPM*转载于:https://blog.51cto.com/someos/1338354

at指令返回值检验c语言,学渣求指教,如何识别字符串中的AT命令并逐个输出,求程序!!!...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼Topic – to implement a parser to retrieve AT command line and print out (1) the tokensone by one and (2) the elapse time of each command line (processing).Please submit the solution in 48 hours.- The solution cou…

hdu 5730 Shell Necklace——多项式求逆+拆系数FFT

题目:http://acm.hdu.edu.cn/showproblem.php?pid5730 可以用分治FFT。但自己只写了多项式求逆。 和COGS2259几乎很像。设A(x),指数是长度,系数是方案。 \( A(x)^{k} \) 的 m 次项系数表示 k 个连续段组成长度为 m 的序列的方案数。 \( B(x)…

虚拟磁带库

虚拟磁带库(Virtual Tape Library,VTL),是指以磁盘作为自身存储介质,并能仿真为物理磁带库的产品。简单的说,虚拟磁带库就是将磁盘空间虚拟为磁带空间,能够在传统的备份软件上实现和传统磁带库同样功能的产品。传统磁带…