对象的种类
- JS内置对象(Date/String/Array等)
- 宿主环境对象(window)
- 自己创建的对象
对象的创建方式
var obj = {
id: 123,
name: '小米', // 属性
walk: function(){} // 方法
}
// get set创建对象属性
var obj = {
_age: 0,
get age(){
return this._age;
},
set age(val){
this._age = val;
}
}
obj.age = 30;
obj.age; // 30~~~~
- new方式 (需要多个相同结构的对象或有继承运用到时使用)
var obj = new Object();
字面量方式与new方式其实是一样的,都是通过Object()构造函数创建
对象属性的访问方式
var obj = {
id: 123,
name: '小米', // 属性
walk: function(){} // 方法
}
obj.id; // 123
***动态属性名*** 或者 ***属性名是数字*** 时,不能使用点方式访问
var obj = {
1: 123,
name: '小米'
}
obj["1"] // 123
var k = 'name';
obj[k] // '小米'
如果访问对象的不存在属性时,就返回 undefined
对象属性访问技巧
var p = obj && obj.a && obj.a.x;
对象属性的新增方式 (动态)
// 注意:一些特殊属性名(动态或数字)不能使用此方式添加,要使用中括号方式
var obj = new Object();
obj.name = "xxx";
// 此方式最通用,特殊的属性名也能使用
var obj = new Object();
var k = "name";
obj["age"] = 100;
obj["1"] = 123;
obj[k] = 'wwtt'
此方式是ES5开始支持,相比前2种方式,此方式不仅可以新增属性值,还能对新增的属性或已存在的属性配置属性特性(例如属性是否可写),所以此方式更加彻底
~注意 如果使用此方式新增属性,省略的特性,默认都是false
var obj = new Object();
Object.defineProperty(obj, 'name', {
value: "wutao"
})
// 属性特性还有get、set、value、writable、enuerable、configurable
对象属性的删除
并非所有属性都可以删除,只有自己定义的,并且configurable为true才可以删除
delete obj.name; // true
对象的遍历
判断对象的某个属性是否存在
"name" in obj // boolean
obj.hasOwnProperty("name") // true or false
顶层构造器
var obj = {}
obj.constructor // function Object(){}
Object.constructor // function Function(){}
var fn = function(){}
fn.constructor // function Function(){}
Function.constructor // function Function(){}
所以顶层构造器是Function()
JS的类就是构造函数
1、构造函数名第一个字母需要大写,普通函数名第一个字母需要小写
2、构造函数体内,this指代创建的对象,普通函数体内,this指代调用方
function Person(name, age){
this.name = name;
this.age = age;
}
var person = new Person("xiaoZhu", 30);
在多个对象中定义相同名称的属性与方法并不算时公共的!会占用多余内存空间,要在对象的原型中定义的属性与方法才算是公共属性与方法
function Person(name, age){
this.name = name;
this.age = age;
}
Person.prototype.walk = function(){};
var person = new Person("xiaoZhu", 30);
person.walk();
原型的构造函数还是原本的函数
function Person(){
this.name = "xxx";
}
Person.prototype.constructor === Person; // true
注意:对象没有直接与构造函数关联,而是直接与原型进行关联,之所以好像书写上能直接访问constructor,其实是通过原型链来访问的
function Person(){
this.name = "xxx";
}
var o = new Person();
o.constructor // Person
o.hasOwnProperty("constructor") // false
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。