1-1 构造属性

  1. ## 创建构造函数的时候,原型对象上会有一个constructor属性,它是原型对象所独有的,它指向构造函数本身。

4.构造属性 - 图1

  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.constructor);
  7. console.log(p.constructor == Person); // true
  8. console.log(p.__proto__ == Person.prototype); //true
  9. var arr = [1,2,3]
  10. console.log(arr.constructor == Array); // true

1-2 给原型添加属性

  1. # 问题:我们以直接量(对象)形式,给原型添加属性的时候,它的constructor会指向Object
  2. # 解决:重置 constructor
  1. function Person(name,age){
  2. this.name = name
  3. this.age = age
  4. }
  5. Person.prototype = {
  6. sayName:function(){
  7. console.log(this.name);
  8. },
  9. sayAge(){
  10. console.log(this.age);
  11. }
  12. }
  13. var p = new Person("cheng",20)
  14. console.log(p.constructor); //Object
  15. console.log(p.constructor == Person); // false
  16. console.log(p instanceof Person); // true
  17. ## 解决办法
  18. Person.prototype = {
  19. constructor:Person, // 重置 constructor
  20. sayName:function(){
  21. console.log(this.name);
  22. },
  23. sayAge(){
  24. console.log(this.age);
  25. }
  26. }
  27. var p = new Person("cheng",20)
  28. console.log(p.constructor); // Person
  29. console.log(p.constructor == Person); // true

image.pngimage.png

1-3 公有属性和私有属性

  1. # 公有属性: 一般在原型对象上
  2. # 私有属性: 通过this关键字去添加的
  3. # hasOwnProperty 可以判断属性是私有的还是公有的
  1. function Person(name,age){
  2. this.name = name
  3. this.age = age
  4. }
  5. Person.prototype = {
  6. constructor:Person,
  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.hasOwnProperty("name")); // true 私有的
  16. console.log(p.hasOwnProperty("sayName")); // false 公有的
  17. //判断constructor是否是原型对象的私有属性
  18. console.log(Person.prototype.hasOwnProperty("constructor")); // true