• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 网页制作 > JavaScript >

JS面向对象教程(2)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-02-06点击:

  ◆ Javascript的成员函数可以在实例上进行修改,也就是说不同实例相同函数名的行为不一定一样。

  属性配置 – Object.defineProperty

  先看下面的代码:

  //创建对象

  var chenhao = Object.create(null);

  //设置一个属性

  Object.defineProperty( chenhao,

  'name', { value: 'Chen Hao',

  writable: true,

  configurable: true,

  enumerable: true });

  //设置多个属性

  Object.defineProperties( chenhao,

  {

  'email' : { value: 'haoel@hotmail.com',

  writable: true,

  configurable: true,

  enumerable: true },

  'website': { value: 'http://coolshell.cn',

  writable: true,

  configurable: true,

  enumerable: true }

  }

  );

  下面就说说这些属性配置是什么意思。

  writable:这个属性的值是否可以改。

  configurable:这个属性的配置是否可以改。

  enumerable:这个属性是否能在for…in循环中遍历出来或在Object.keys中列举出来。

  value:属性值。

  get()/set(_value):get和set访问器。

  Get/Set 访问器

  关于get/set访问器,它的意思就是用get/set来取代value(其不能和value一起使用),示例如下:

  var age = 0;

  Object.defineProperty( chenhao,

  'age', {

  get: function() {return age+1;},

  set: function(value) {age = value;}

  enumerable : true,

  configurable : true

  }

  );

  chenhao.age = 100; //调用set

  alert(chenhao.age); //调用get 输出101(get中+1了);

  我们再看一个更为实用的例子——利用已有的属性(age)通过get和set构造新的属性(birth_year):

  Object.defineProperty( chenhao,

  'birth_year',

  {

  get: function() {

  var d = new Date();

  var y = d.getFullYear();

  return ( y - this.age );

  },

  set: function(year) {

  var d = new Date();

  var y = d.getFullYear();

  this.age = y - year;

  }

  }

  );

  alert(chenhao.birth_year);

  chenhao.birth_year = 2000;

  alert(chenhao.age);

  这样做好像有点麻烦,你说,我为什么不写成下面这个样子:

  var chenhao = {

  name: "Chen Hao",

  email: "haoel@hotmail.com",

  website: "http://coolshell.cn",

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1978130638@qq.com ,  QQ