Skip to main content
 Web开发网 » 编程语言 » ASP语言

高性能 的javaScript 之遍历对象属性

2021年10月11日7200百度已收录

  在面向对象的开发工作中,经常会遇到检查对象属性和遍历对象属性的情况。 JavaScript 不包含如 java、C 等语言的传统类继承模型,而是使用 prototype 原型模型。

  JavaScript 原型链继承中属性查找过程

  当查找一个对象的属性时,JavaScript 会向上遍历原型链,直到找到给定名称的属性为止。

  到查找到达原型链的顶部 - 也就是 Object.prototype - 但是仍然没有找到指定的属性,就会返回 undefined。

  使用 for in 循环可以遍历对象所有的属性,包括该对象在原型链中的属性,如:

  var a = {

  a:1,

  b:2

  var b = Object.create(a);

  b.c = 3;

  var c = Object.create(b);

  c.d = 4;

  for(var key in c){

  console.log(c[key])

  //会在控制台中依次打印出4 3 1 2

  注意在控制台中打印的顺序是 4 3 1 2,而不是 1 2 3 4,这就解释了原型链继承时查找属性的过程是先查找自身属性,当自身属性不存在时,会在原型链中逐级查找。

  如果有需要学习IT转行的 朋友可以进IT交流q裙哦 这里有大神 也有小白 也有刚刚跟你一样经历过 现在已经做上IT工作的前辈 大家相互学习 相互交流 《49 **6零三吧 649》 一定要 进裙备注:亚索 要不管理员会不加你的。

  有时候我们并不想要这样的结果,我们只想要获取对象自身的属性(不包括对象原型链上的属性),况且每次遍历都要查找对象的原型链,这样会造成性能负担。

  hasOwnProperty 函数

  hasOwnProperty 函数可以用来检查对象自身是否含有某个属性,返回值是布尔值,当属性不存在时不会向上查找对象原型链。

  用个例子来看看 hasOwnProperty 和 for in 的区别:

  if(var "a" in c){

  console.log(c["a"]) //属性 a 是原型链上的属性, 输出 1

  if(c.hasOwnProperty("a")){

  console.log(c["a"]) //属性 a 不是自身属性,不会执行这一步

  getOwnPropertyNames 函数

  getOwnPropertyNames 函数可以获取对象所有的自身属性,返回值是由对象自身属性名称组成的数组,同样不会向上查找对象原型链。

  如:

  console.log(Object.getOwnPropertyNames(c)) //输出 ["d"]

  getOwnPropertyNames 函数遍历所有对象所有自身属性,例:

  (fucntion(){

  var propertys = Object.getOwnPropertyNames(c);

  var len = propertys.length;

  for(var i = 0; i < len; i++){

  var key = propertys[i];

  console.log(c[key]) //输出 4

评论列表暂无评论
发表评论
微信