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 相关文章推荐
优化JavaScript脚本的性能的几个注意事项
Dec 22 Javascript
jQuery 学习第五课 Ajax 使用说明
May 17 Javascript
javascript 拖动表格行实现代码
May 05 Javascript
jquery实现滑动图片自己测试的例子
Nov 05 Javascript
jquery鼠标停止移动事件
Dec 21 Javascript
js使用eval解析json(js中使用json)
Jan 17 Javascript
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
Jun 12 Javascript
jQuery.cookie.js使用方法及相关参数解释
Mar 06 Javascript
js实现canvas保存图片为png格式并下载到本地的方法
Aug 31 Javascript
vue的过滤器filter实例详解
Sep 17 Javascript
jquery实现拖拽小方块效果
Dec 10 jQuery
加随机数引入脚本不让浏览器读取缓存
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
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
PHP的preg_match匹配字符串长度问题解决方法
2014/05/03 PHP
PHP针对JSON操作实例分析
2015/01/12 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
javascript操作文本框readOnly
2007/05/15 Javascript
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
Three.js源码阅读笔记(物体是如何组织的)
2012/12/27 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
node.js中的console.assert方法使用说明
2014/12/10 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
php基于redis处理session的方法
2016/03/14 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
详解Node项目部署到云服务器上
2017/07/12 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
在Linux系统上安装Python的Scrapy框架的教程
2015/06/11 Python
python2.7的编码问题与解决方法
2016/10/04 Python
python 内置函数filter
2017/06/01 Python
Python将多个excel文件合并为一个文件
2018/01/03 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
Python将图片转换为字符画的方法
2020/06/16 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
一款纯css3实现的颜色渐变按钮的代码教程
2014/11/12 HTML / CSS
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
英国自行车商店:AW Cycles
2021/02/24 全球购物
哈萨克斯坦移动和数字技术在线商店:SatelOnline.kz
2020/09/04 全球购物
策划助理岗位职责
2013/11/18 职场文书
大学生毕业的自我评价分享
2014/01/02 职场文书
手术室护士长竞聘书
2014/03/31 职场文书
业务员岗位职责
2015/02/03 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang