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的loading效果实现代码
Nov 05 Javascript
JavaScript中计算网页中某个元素的位置
Jun 10 Javascript
JS实现可拖曳、可关闭的弹窗效果
Sep 26 Javascript
浅谈js键盘事件全面控制
Dec 01 Javascript
JavaScript在控件上添加倒计时功能的实现代码
Jul 04 Javascript
Vue 进入/离开动画效果
Dec 26 Javascript
jQuery实现获取及设置CSS样式操作详解
Sep 05 jQuery
vue动态删除从数据库倒入列表的某一条方法
Sep 29 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
JavaScript组合设计模式--改进引入案例分析
May 23 Javascript
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 Javascript
Vue图片裁剪组件实例代码
Jul 02 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中取得文件的后缀名?
2012/02/20 PHP
PHP中开启gzip压缩的2种方法
2015/01/31 PHP
php实现对象克隆的方法
2015/06/20 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHP模型Model类封装数据库操作示例
2019/03/14 PHP
ThinkPHP5分页paginate代码实例解析
2020/11/10 PHP
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
手机端网页点击链接触发自动拨打或保存电话的示例代码
2014/08/15 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
CSS javascript 结合实现悬浮固定菜单效果
2015/08/23 Javascript
JS中数组重排序方法
2016/11/11 Javascript
利用Jquery实现几款漂亮实用的时间轴(附示例代码)
2017/02/15 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
使用gulp搭建本地服务器并实现模拟ajax
2017/04/05 Javascript
Bootstrap datepicker日期选择器插件使用详解
2017/07/26 Javascript
微信小程序简单实现form表单获取输入数据功能示例
2017/11/30 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
vue+element UI实现树形表格带复选框的示例代码
2019/04/16 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
Python 移动光标位置的方法
2019/01/20 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
德国苹果商店:MacTrade
2020/05/18 全球购物
班长岗位职责
2013/11/10 职场文书
人力资源管理专业学生自我评价
2013/11/20 职场文书
党校培训思想汇报
2013/12/30 职场文书
旷课检讨书1000字
2014/02/14 职场文书
个人委托书范本
2014/04/02 职场文书
银行竞聘演讲稿范文
2014/04/23 职场文书
十佳少年事迹材料
2014/12/25 职场文书
一文带你探究MySQL中的NULL
2021/11/11 MySQL