ECMAScript5之Object学习笔记(三)
第三部分继续...
Object.getOwnPropertyDescriptor(obj, prop)
获取一个对象的属性描述符
根据"Own"这个词我们可以猜到,prop只能是obj的“直接”属性,prototype链上的无效
来几个直观的例子,以作说明:
var person = {},
nameDesc, // name descriptor
titleDesc, // title descriptor
ageDesc; // age descriptor
person.name = 'Andrew';
nameDesc = Object.getOwnPropertyDescriptor(person, 'name');
console.dir(nameDesc);
// { "configurable": true, "enumerable": true, "value": "Andrew", "writable": true }
Object.defineProperty(person, 'title', {
value: 'sales manager',
writable: true
});
titleDesc = Object.getOwnPropertyDescriptor(person, 'title');
console.dir(titleDesc);
// { "configurable": false, "enumerable": false, "value": "sales manager", "writable": true }
var _age = 25;
Object.defineProperty(person, 'age', {
get: function() {
return _age + ' years old';
},
set: function(age) {
_age = age;
}
});
person.age = 20;
console.log(_age); //
console.log(person.age) // 20 years old
ageDesc = Object.getOwnPropertyDescriptor(person, 'age');
console.dir(ageDesc);
// { "configurable": false, "enumerable": false, "get": function () {...}, "set": function (age) {...} }
Object.getOwnPropertyNames(obj)
获取对象的(非原型链上的)“直接”属性名集合(无论该属性是否可列举)
代码示例如下:
var arr = ['1st', '2nd', '3rd'];
console.log( Object.getOwnPropertyNames(arr) );
// ["0", "1", "2", "length"] var usa = {
president: 'Obama',
states: 52
};
console.log( Object.getOwnPropertyNames(usa) );
// ["president", "states"] Object.defineProperty(usa, 'population', {
enumerable: false,
value: '300million'
});
// 即使属性不可列举,依然能获得
console.log( Object.getOwnPropertyNames(usa) );
// ["president", "states", "population"]
Object.getPrototypeOf(obj)
返回对象的prototype
上代码:
var Base = function() {}
Base.prototype.base_method1 = function() {};
Base.prototype.base_method2 = function() {};
var base = new Base();
console.log( Object.getPrototypeOf(base) );
// { base_method1: function, base_method2: function }
var Sub = function() {
Base.call(this);
}
Sub.prototype = Object.create(Base.prototype);
Sub.prototype.constructor = Sub;
Sub.prototype.sub_method1 = function() {};
var sub = new Sub();
console.log( Object.getPrototypeOf(sub) );
// { constructor: function, sub_method1: function, base_method1: function, base_method2: function }
为了方便说明,chrome中输出的内容如下:

从上面的例子,可以发现Object.getPrototypeOf(obj)可以返回对象的prototype,并且通过prototype链(通过__proto__)可以查看到”基类“从”父类“上继承的方法(或属性)。
在chrome中还可以看到返回的prototype对象包括constructor(构造函数)和__proto__(非标准,但现代浏览器都支持,当然IE除外)
Object.keys(obj)
返回对象自身的可列举属性集合
上代码:
var arr = ['Tom', 'Focker', 'linkon'];
console.log( Object.keys(arr) );
// ["0", "1", "2"] var person = {
name: 'Andrew',
age: 25,
gender: 'male'
};
console.log( Object.keys(person) );
// ["name", "age", "gender"] Object.defineProperty(person, 'address', {
value: 'SuZhou,China',
enumerable: false
});
// address属性不可以列举,所以Object.keys的返回结果不变
console.log( Object.keys(person) );
// ["name", "age", "gender"]
第三部分就到此为止。
ECMAScript5之Object学习笔记(三)的更多相关文章
- ECMAScript5之Object学习笔记(一)
随着IE的逐步追赶,目前到IE11已经能够很好的支持ECMAScript5标准了,其他的现代浏览器像firefox,chrome,opera就更不用说了. 再加上nodejs使得javascript在 ...
- ECMAScript5之Object学习笔记(二)
继续第二部分 Object.freeze(obj) 看字面意思就是“把一个对象冻结”. 下面我们来看个简单的例子以作说明: // a person instance var person = { na ...
- 学习笔记(三)--->《Java 8编程官方参考教程(第9版).pdf》:第十章到十二章学习笔记
回到顶部 注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法 ...
- openresty 学习笔记三:连接redis和进行相关操作
openresty 学习笔记三:连接redis和进行相关操作 openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理.避 ...
- ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心
作者:Grey 原文地址:ZooKeeper学习笔记三:使用ZooKeeper实现一个简单的配置中心 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 很多程序往 ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
随机推荐
- 1022 Digital Library (30)(30 point(s))
problem A Digital Library contains millions of books, stored according to their titles, authors, key ...
- 【20181031T1】一串数字【分解质因数+贪心】
题面 [错解] 立方就是所有质因子次数都是3的倍数嘛 发现1e5的三次根很小,可以枚举所有和这个数乘起来是完全立方数的(flag*1) 然后--连条边跑最大独立集? 不对啊是NP问题(实际上是个二分图 ...
- php 安全模式限制函数
表 42-2. 安全模式限制函数 函数名 限制 dbmopen() 检查被操作的文件或目录是否与正在执行的脚本有相同的 UID(所有者). dbase_open() 检查被操作的文件或目录是否与正在执 ...
- 【BZOJ-3123】森林 主席树 + 启发式合并
3123: [Sdoi2013]森林 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2738 Solved: 806[Submit][Status] ...
- C++ tuple类型
前言 最近在看C++ Primer的时候,对于对象移动一直不太懂,所以在查找各种资料,仔细研究代码后,打算写篇博客记录下来,果然还是不要得过且过,看见不懂的就查,弄懂为止最好了. 对象移动 很多时候都 ...
- python开发_getpass_获取登录名
我们有时候需要获取到计算机的登录名,这时候,就可以使用python中的getpass模块了 下面是我做的demo 运行效果: ===================================== ...
- vs2017与docker
基本需求 系统 win10 vs2017 docker 步骤 1.开启系统的hyper-v 2. 重启电脑 3.安装docker 下载地址:https://docs.docker.com/docker ...
- 怎样用Java代码来把SSL的证书自己主动导入到Java的秘钥存储文件(keystore)
我们在开发或者使用SSL的过程中,非常多的软件须要我们提供java的keystore.特别是一些基于Java的中间件产品. 我们常规的做法是JDK自带的工具命令(keytool)去做.比方,以下的样例 ...
- linux centos 系统php支持jpeg的安装方法
linux php支持jpeg首先要安裝libjpeg,运行下面的命令: yum install libjpeg* libpng* freetype* gd* 耐心等待完成,重启(service ht ...
- Roundcube login via PHP script
目前正在整合 roundcube 1.0.5 的邮件系统和其他系统,想取消登录过程,发现了这个,先赞一个! 原文地址: http://blog.philippheckel.com/2008/05/16 ...