对象
对象的定义方式
通过直接量方式:
var obj = {x:1,y:2};
通过new 方式
var obj = new Object();
通过Object.create方式
var obj = Object.create();Javascript分为内置对象、宿主对象和自定义对象
内置对象包括数组、函数、日期和正则表达式
宿主对象是由Javascript解释器所嵌入的宿主环境定义的。比如Web浏览器,客户端Javascript中表示网页结构的HTMLElement对象均是宿主对象
自定义对象是由运行中的Javascript代码创建的对象。
- es5中新添加setter和getter存取器
var o = {
x:1,
y:1,
get r(){
console.info(this.x);
},
set r(newValue){
this.x = newValue;
}
};
o.r = 11;
o.r; => 11;
- 属性特性
Object.defineProperty();
var o = {};
Object.defineProperty(o,'x',{
value:1, //值
writable:true,//可写性
enumerable:true,//可枚举性
configurable:true //可配置型
});
- prototype和constructor
prototype是对象中的一个自定义属性,每个对象中都会有一个prototype属性。
jQuery 源码中
(function(window){
var jQuery = function(){
return new jQuery.fn.init();
};
//jQuery源码中prototype和constructor的关系
jQuery.fn = jQuery.prototype = {
constructor:jQuery,
};
jQuery.fn.init.prototype = jQuery.fn;
window.jQuery = window.$ = jQuery;
})(window);
我一直认为prototype在自定义对象中是以一个地址标记存在的,所以当对象以new 的形式创建时候可以共享这个地址,而减少内存地址的使用,达到了内存共用而不会被浪费的目的,Object.prototype是构造函数下的一个对象,这个对象下同样也存在这个以constructor属性,用于标记他的构造函数的地址,从而进行双向标记。
- JSON
JSON.stringify()将对象解析成字符串。
var obj = {
a:1,
b:2
};
var str = JSON.stringify(obj);
console.info(str);=>{"a":1,"b":2}
JSON.parse()将字符串解析成对象
var str = '{"name":"test"}';
var obj = JSON.parse(str);
console.info(typeof obj); =>object