先看一段代码:varPerson=function(fname,age){this.fname=fname;this.age=age;};//Object内部有一个name属性,如果这里使用defineProperty的话会覆盖该name属性Object.defineProperty(Person,'fname',{value:'change',enumerable:false});console.log(Person.fname);//changeconsole.log(Person.age);//undefinedvarp1=newPerson('fname',20);console.log(p1);//Object{fname="fname",age=20}for(varsinp1){console.log(s);//fname//age}在这段代码中,先声明了一个构造器,随后使用Object.defineProperty方法来定义了Person类的fname属性的value和enumerable。随后我们打印了Person.fname可以看出代码是运行并生效,但是在随后新声明的变量中它仍然可以被forin循环输出。于是,我尝试了使用字面量定义变量,这回正常了,请问这是声明原因引起的呢?varPerson={fname:'fname',age:20};Object.defineProperty(Person,'fname',{value:'change',enumerable:false});console.log(Person.fname);//changeconsole.group('遍历Person的可枚举属性');for(varsinPerson){console.log(s);//age}console.groupEnd();
长风秋雁
绝地无双
相关分类