我们创建构造函数的时候,原型对象上会有一个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.constructor==Person)
  7. var arr = [1,2,3];
  8. console.log(arr.constructor == Array)

给构造函数添加方法

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