**

一、构造属性

所有原型对象自动获得一个名为constructor的属性,指回相关联的构造函数四、构造属性 - 图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. var arr = [1,2,3]
  9. console.log(arr.constructor == Array); // 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:function(){
  11. console.log(this.age)
  12. }
  13. }
  14. // 问题:就是我们以直接量(对象)的形式,给原型对象添加属性的时候,它的constructor会指向object
  15. var p=new Person("xuan",18)
  16. console.log(p) // Person {name: "xuan", age: 18}
  17. console.log(p.constructor==Person) //false

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

三、重置

  1. function Person(name,age){
  2. this.name=name;
  3. this.age=age
  4. }
  5. // 以(字面量)对象的形式给原型对象添加属性
  6. Person.prototype={
  7. // 重置constructor属性
  8. constructor:Person,
  9. sayName:function(){
  10. console.log(this.name)
  11. },
  12. sayAge:function(){
  13. console.log(this.age)
  14. }
  15. }
  16. // 问题:就是我们以直接量(对象)的形式,给原型对象添加属性的时候,它的constructor会指向object
  17. // 所以就需要重置constructor属性
  18. var p=new Person("xuan",18)
  19. console.log(p) // Person {name: "xuan", age: 18}
  20. console.log(p.constructor==Person) //true

重置constructor属性

四、公有属性和私有属性

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

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