JavaScript-高级篇-构造函数(下)

90 阅读2分钟

「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战」。

6. 构造函数实例和原型对象三角关系

1.构造函数的prototype属性是构造函数原型对象

2.实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象

3.构造函数的原型对象的constructor属性指向了构造函数,实例对象的原型的constructor属性也指向了构造函数

7. 原型链和成员的查找机制

当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。

如果没有就查找它的原型(也就是 __proto__指向的 prototype 原型对象)。

如果还没有就查找原型对象的原型(Object的原型对象)。

依此类推一直找到 Object 为止(null)。

__proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。

7.1 obj.hasOwnProperty(prop)方法

可以判断一个属性定义在对象本身而不是继承原型链的方法,主要用于判断某个对象中是否有某个属性,返回值为布尔值。

7.2 Object.prototype.isPrototypeOf(Object)方法

isPrototypeOf方法接收一个对象,用来判断当前对象是否在传入的参数对象的原型链上,返回一个布尔值。  

8. 原型对象中this指向

构造函数中的this和原型对象的this,都指向我们new出来的实例对象

function Person(name) {
            this.mName = name;
 }
 var that;
 Person.prototype.sayName = function() {
       console.log('我是大咖');
       that = this;
  }
  var p1 = new Person('张三');
  // 1. 在构造函数中,里面this指向的是实例对象
  p1.sayName();
  console.log(that);
  console.log(p1);
  console.log(that === p1); //true
  // 2.原型对象函数里面的this指向的是实例对象

9. 通过原型为数组扩展内置方法

Array.prototype.sum = function() {
   var sum = 0;
   for (var i = 0; i < this.length; i++) {
   sum += this[i];
   }
   return sum;
 };
 //此时数组对象中已经存在sum()方法了  可以始终 数组.sum()进行数据的求