Javascript Objects详解


Posted in Javascript onSeptember 04, 2014

创建对象

 •对象直接量

var o = {
 foo : "bar"
 }

•构造函数

var o = new Object();

•原型继承

var p = Object.create(o);

类继承

Javascript对象拥有自有属性和继承属性。

 •在查询对象o的属性x时,先查找o中的属性x,如果没找到,则查找o的原型对象中的x属性,直到查找到x或者一个原型是null的对象为止

 •在给对象o的x属性赋值时,如果o中已经有一个自有属性x,则改变x的值,若o中不存在属性x,则为o创建一个x属性并赋值

 •也就是说,只有在查询时原型链才会起作用。

var O = {
 x : 1
 };
function P() {
 this.y = 2;
 }
P.prototype = O;
var t = new P();
 console.log(t);
 console.log('x' in t);//true
 console.log(t.hasOwnProperty('x'));//false

可以使用in 或者 hasOwnProperty 来判断对象中是否存在属性。

对象属性

 •遍历对象属性
 
可以使用 for..in 来遍历对象的属性

使用for..in时会遍历到原型链上的属性。遍历顺序是以广度优先遍历

所以使用hasOwnProperty便可以判断是否是对象自有的属性。

 •对象属性的特性
 
使用Object.getOwnPropertyDescriptor()获取对象特定属性的描述符

可写性(writable) 表示对象属性是否可写

例如

var o = {
  foo : 'bar'
}
Object.defineProperty(o, "foo", { writable : false });
o.foo = 'world';
console.log(o.foo);//仍然输出bar

 可枚举性(enumerable) 表示对象属性是否可枚举

例如
 Array中的length等属性的 enumerable是false,所以,

for (p in Array) {
  console.log(p);
}

 什么也不输出

可配置性(configurable) 表示可否修改属性的可配置性和可枚举性

可以用Object.defineProperties来定义这些配置属性。
Object.defineProperty(o, "foo", { writable : false });

 Get 表示获取对象属性的方法
Set 表示设置对象属性的方法

示例

var book = {
  _year: 2004,
  edition: 1
};
Object.defineProperty(book, "year", {
  get: function () {
    console.log('get year');
    return this._year;
  },
  set: function (newValue) {
    console.log('set year');
    if (newValue > 2004) {
      this._year = newValue;
      this.edition += newValue - 2004;
    }
  }
});
book.year = 2005;//控制台输出‘set year'
console.log(book.year);//控制台输出‘get year'和year的值

 对象方法

toString 将对象转换成字符串,默认的转换会是[object Object]之类的东西,所以需要转成json格式的话可以用JSON.stringify

valueOf 需要将对象转换成其他类型的时候要用到。同样的,默认转换没什么值得说的。
 
可执行对象

通过如下方法可以创建一个可执行对象

function bar(o) {
  var f = function() { return "Hello World!"; }
  o.__proto__ = f.__proto__;
  f.__proto__ = o;
  return f;
}
var o = { x: 5 };
var foo = bar(o);
console.log(foo());
console.log(foo.x);
console.log(typeof foo);//function

 既可以当作对象来使用(有原型链),也可以当作函数来直接调用

Javascript 相关文章推荐
jquery 锁定弹出层实现代码
Feb 23 Javascript
根据出生日期自动取得星座的js代码
Jul 20 Javascript
javascript学习笔记(二十) 获得和设置元素的特性(属性)
Jun 20 Javascript
Js数组排序函数sort()介绍
Jun 08 Javascript
JS实现table表格数据排序功能(可支持动态数据+分页效果)
May 26 Javascript
AngularJS 输入验证详解及实例代码
Jul 28 Javascript
Web打印解决方案之普通报表打印功能
Aug 29 Javascript
完全深入学习Bootstrap表单
Nov 28 Javascript
详解如何在vue项目中使用layui框架及采坑
May 05 Javascript
微信小程序+云开发实现欢迎登录注册
May 24 Javascript
解决layui table表单提示数据接口请求异常的问题
Sep 24 Javascript
关于vue-router-link选择样式设置
Apr 30 Vue.js
加随机数引入脚本不让浏览器读取缓存
Sep 04 #Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 #Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
Sep 04 #Javascript
Flexigrid在IE下不显示数据的有效处理方法
Sep 04 #Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Sep 04 #Javascript
告诉你什么是javascript的回调函数
Sep 04 #Javascript
jquery学习总结(超级详细)
Sep 04 #Javascript
You might like
php错误级别的设置方法
2013/06/17 PHP
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
PHP二维数组去重算法
2016/12/17 PHP
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
jQuery+slidereveal实现的面板滑动侧边展出效果
2015/03/14 Javascript
浏览器兼容性问题大汇总
2015/12/17 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
简单实现Vue的observer和watcher
2016/12/21 Javascript
懒加载实现的分页&&网站footer自适应
2016/12/21 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
JS库之Particles.js中文开发手册及参数详解
2017/09/13 Javascript
你应该知道的几类npm依赖包管理详解
2017/10/06 Javascript
基于vue cli重构多页面脚手架过程详解
2018/01/23 Javascript
react实现移动端下拉菜单的示例代码
2020/01/16 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
[47:50]Secret vs VP 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
用Python的Tornado框架结合memcached页面改善博客性能
2015/04/24 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python求解数组中两个字符串的最小距离
2018/09/27 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
Keras中的多分类损失函数用法categorical_crossentropy
2020/06/11 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
英国曼彻斯特宠物用品品牌:Bunty Pet Products
2019/07/27 全球购物
大学生励志演讲稿
2014/04/25 职场文书
感恩节寄语2015
2015/03/24 职场文书
运动会100米广播稿
2015/08/19 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
Pytest中conftest.py的用法
2021/06/27 Python
解决pycharm下载库时出现Failed to install package的问题
2021/09/04 Python
如何在Python中妥善使用进度条详解
2022/04/05 Python