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

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

JS面向对象教程(3)

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

  age: 100,

  get birth_year() {

  var d = new Date();

  var y = d.getFullYear();

  return ( y - this.age );

  },

  set birth_year(year) {

  var d = new Date();

  var y = d.getFullYear();

  this.age = y - year;

  }

  };

  alert(chenhao.birth_year);

  chenhao.birth_year = 2000;

  alert(chenhao.age);

  是的,你的确可以这样的,不过通过defineProperty()你可以干这些事:

  1)设置如 writable,configurable,enumerable 等这类的属性配置。

  2)动态地为一个对象加属性。比如:一些HTML的DOM对像。

  查看对象属性配置

  如果查看并管理对象的这些配置,下面有个程序可以输出对象的属性和配置等东西:

  //列出对象的属性.

  function listProperties(obj)

  {

  var newLine = "
";

  var names = Object.getOwnPropertyNames(obj);

  for (var i = 0; i < names.length; i++) {

  var prop = names[i];

  document.write(prop + newLine);

  // 列出对象的属性配置(descriptor)动用getOwnPropertyDescriptor函数。

  var descriptor = Object.getOwnPropertyDescriptor(obj, prop);

  for (var attr in descriptor) {

  document.write("..." + attr + ': ' + descriptor[attr]);

  document.write(newLine);

  }

  document.write(newLine);

  }

  }

  listProperties(chenhao);

  call,apply, bind 和 this

  关于Javascript的this指针,和C++/Java很类似。 我们来看个示例:(这个示例很简单了,我就不多说了)

  function print(text){

  document.write(this.value + ' - ' + text+ '
');

  }

  var a = {value: 10, print : print};

  var b = {value: 20, print : print};

  print('hello');// this => global, output "undefined - hello"

  a.print('a');// this => a, output "10 - a"

  b.print('b'); // this => b, output "20 - b"

  a['print']('a'); // this => a, output "10 - a"

  我们再来看看call 和 apply,这两个函数的差别就是参数的样子不一样,另一个就是性能不一样,apply的性能要差很多。(关于性能,可到 JSPerf 上去跑跑看看)

  print.call(a, 'a'); // this => a, output "10 - a"

  print.call(b, 'b'); // this => b, output "20 - b"

  print.apply(a, ['a']); // this => a, output "10 - a"

  print.apply(b, ['b']); // this => b, output "20 - b"

  但是在bind后,this指针,可能会有不一样,但是因为Javascript是动态的。如下面的示例

  var p = print.bind(a);

  p('a'); // this => a, output "10 - a"

About D8

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