JS设计模式-对象基础
Object的创建,三种方法
1\ var newObject={};//字面值
2\ var newObject=Object.create(Object.prorotype);//根据原型创建
3\ var newObject=new Object();//new 关键字
属性值的创建
1\ newObject.someKey="Hello World";
2\ newObject["someKey"]="Hello World";
3\ Object.defineProperty(newObject,"someKey",{
value:"for more control of the property's behavior",
writable:true,
enumerable:true,
configurable:true
})
//函数式
var defineProp=function(){
var config={
value:value,
writable:true,
enumerable:true,
configurable:true
}
Object.defineProperty(obj,key,config);
}
4\ Object.defineProperties(newObject,{
"someKey":{
value:"Hello World",
writable:true
},
"anotherKey":{
value:"Foo bar",
writable:false
}
})
构造函数
function Car(model,year,miles){
this.model=model;
this.year=year;
this.miles=miles;
this.toString=function(){
return this.model+"had done"+this.miles+"miles";
}
}
var civic=new Car('Huayra',2010,5000);
重写方法
Car.prorotype.toString=function(){
return this.model+"had done"+this.miles+"miles";
}
这里主要介绍了一些创建对象和重写对象的方法。几点小的说明:
prototype为大家很熟悉的一个对象,在本对象内寻找方法没有结果的时候,则会向prototype所指向的对象搜寻属性,跟指针太像了,仍无调用属性亦向prototype所指对象内搜寻,如果仍未找到,则返回undifined。此为js面向对象的一个起点。
defineProperty可以对对象的属性进行一些约束,过去不太常用。签字为:Object.defineProperty(obj,prop,descriptor);需要注意的一点是此方法属于ECMA5规范,在IE89系列中,对DOM元素有支持,还有一些怪癖特性。MOZ和Chrome不用担心太多。
descriptor中包含: configurable可配置,代表此属性可配置;
enumerable可枚举,简单的来说就是可以使用for in语句访问到的,想了解更多可以谷歌枚举和迭代器原理。
value赋值
writable可以用赋值运算符改变
get
set 这两个属性提供存取器,可以在函数内对存取进行一些操作
上面这些属性默认情况下为undefined或false
可要注意的一点是get和value同时出现的话会有一些冲突。

浙公网安备 33010602011771号