javascript面向对象编程(一)

面向对象的程序设计
 
//创建对象的最简单的方式:创建一个Object实例,然后添加属性和方法
 
 var person = new Object();
 person.name="Sam";
 person.age="29";
 person.job="Software Engiener";
 person.sayName=function(){
  alert(this.name);
 };
 
//或者使用对象字面量创建一个对象
 var person = {
  name:"Sam",
  age:"29",
  job:'Software Engineer',
  sayName:function(){
   alert(this.name);
  }
 };
ECMA-262 第5版 在定义只有在语言内部使用的特性(attribute)时,描述了属性(property)的各种特征,(即一个对象的属性的属性)这些特征是为了实现javascript
引擎用的,因此在javascript中不能直接访问,
 
有两种属性:数据属性和访问器属性
 
数据属性包含一个数据值的位置,在这个位置可以读取和写入值,有4个描述其行为的特性:
 
[[Configurable]]:默认值为true,而且一旦设置为false,将不能再设置为true,表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性
[[Enumerable]]:表示能否通过for-in循环返回属性,默认值为true
[[Writable]]:表示能否修改属性值,默认值为true
[[Value]]:包含属性的数据值,从这个位置读,写入属性的值的时候,也把新值保存在这个位置上,默认值是undefined
 
修改属性的默认特性,必须使用Object.defineProperty()方法:Object.defineProperty(obj,proterty,descriptor)
如:
 var person = {};
 Object.defineProperty(person,"name",{
  writable:false,//不可修改
  value:"Sam" //name的属性值设置为Sam
 });
 alert(person.name);//Sam
 person.name="John";//重设name的值,在非严格模式下,操作被忽略,在严格模式下,操作将导致抛出错误
 alert(person.name);//值仍为Sam,设置失败
 
PS:IE8是第一个实现Object.defineProperty()的浏览器版本,由于在IE8中Object.defineProperty()方法实现的不彻底,因此建议不在IE8中使用

posted on 2016-04-26 22:41  Martus  阅读(84)  评论(0)    收藏  举报