1.构造属性

我们创建构造函数的时候,原型对象上会有一个constructor属性,它是原型对象所独有的

  1. function Person(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. var p=new Person("cheng",20);
  6. console.log(p);
  7. console.log(p.constructor==Person);//true
  8. var arr=[1,2,3];
  9. console.log(arr.constructor==Array);//true

2.重置构造属性

问题:我们以直接量(对象)形式,给原型对象添加属性的时候,它的constructor会指向object
解决:重置constructor属性

  1. function Person(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. Person.prototype={
  6. constructor:Person,//重置constructor属性
  7. sayName:function(){
  8. console.log(this.name);
  9. },
  10. sayAge(){
  11. console.log(this.age);
  12. }
  13. }
  14. var p=new Person("cheng",20);
  15. console.log(p.constructor)//Person
  16. console.log(p.constructor==Person);//true
  17. console.log(p instanceof Person);//true
  18. </script>

3.私有属性和公有属性

公有属性:一般在原型对象上
私有属性:通过this关键字添加的
hasOwnProperty可以判断属性是私有的还是公有的

  1. function Person(name,age){
  2. this.name=name;
  3. this.age=age;
  4. }
  5. Person.prototype={
  6. constructor:Person,//重置constructor属性
  7. sayName:function(){
  8. console.log(this.name);
  9. },
  10. sayAge(){
  11. console.log(this.age);
  12. }
  13. }
  14. /* 公有属性:一般在原型对象上
  15. 私有属性:通过this关键字添加的
  16. hasOwnProperty可以判断属性是私有的还是公有的
  17. */
  18. var p=new Person("cheng",20);
  19. console.log(p.hasOwnProperty("name"));//true
  20. console.log(p.hasOwnProperty("sayName"));//false
  21. console.log(p.hasOwnProperty(constructor));//false 构造属性不是私有的