js中构造函数,原型属性,实例对象关系。

通过代码初步了解三者关系

// Person 是一个构造函数;(它用来构造对象,并且是个函数)
function Person(name, age) {
    var gender = girl // 私有属性
    this.name = name // 自有属性
    this.age = age
}

// prototype 是 Person 原型对象 (它既是实例对象的原型,也是一个对象,也是构造函数的属性,即---原型属性)
// 该对象上定义的所有属性和方法都会被实例对象所继承;
Person.prototype.sayName = function() { 
    alert(this.name) 
}

// kitty即是构造函数Person的实例对象(构造函数生成的一个实例,他是一个对象)一种是通过构造函数生成的‘自有属性’,一种是原型对象可以访问的所有属性
var kitty = new Person('kitty', 14)

kitty.sayName() // kitty

proto属性

  1. 为什么我们的实例对象可以访问到构造函数原型属性上的属性?
    1. 每个对象自身都拥有一个隐式的--proto--属性,该属性默认是一个指向其构造函数的原型属性的指针。
    2. 当一个对象访问一个属性时,首先会找自有属性,如果没有找到则会在--proto--属性指向的原型属性只不过继续查找,如果没有找到的话原型属性的--proto--中查找。如果没找到就会继续按照上面方式继续寻找,直到找到最顶部构造函数Object的prototype原型属性,如果还没有找到就返回undefined;----原型链

两个重要概念

  1. 每一个对象自身都拥有一个隐式--proto--属性,该属性默认是一个指向其构造函数原型属性的指针;
  2. 几乎所有函数都拥有prototype原型属性;
posted @ 2021-06-03 14:32  lixingqian  阅读(132)  评论(0)    收藏  举报