2.6原型链模式扩展-this和原型扩展,链式写法

1.在原型模式中,this常用的有两种情况:

  1)在类中this.xxx = xxx; this是当前类的实例

  2)在某一个方法中的this,看执行的时候“.”前面是谁this就是谁,不管前面有多长,this就是多长

    a)需要先确定this指向(this是谁)

    b)把this替换成对应得代码

    c)按照原型链查找的机制,一步步的查找结果

function Fn() {

  this.x = 100;

  this.y = 200;

  this.getY = function(){}

}

Fn.prototype = {

  constructor: Fn,

  y: 300,

  getX: function(){

    console.log(this.x)
  },

  getY: function(){

    console.log(this.y)
  }

}

var f = new Fn;

f.getX(); // 100 console.log(f.x)-> 100
f.__proto__.getX();//->this是f.__proto__->console.log(f.__proto__.x)->undefined,
f.__proto__.x忽略私有的直接查询公有的,公有的上面没有x所以值为undefined

Fn.prototype.getX();//undefined
f.getY();// 执行的是私有的方法 200
f.__proto__.getY(); // 300

在内置类的原型上扩展我们的方法:

Array.prototype.myUnique = function(){

  //this->ary

  var obj = {};

  for(var i =0; i<this.length;i++){

    var cur= this[i]

    if(obj[cur] == cur){

      this[i] = this[this.length-1];

      this.length--;

      i--;

      continue;

    }

    obj[cur] = cur

  }

  obj = null

  return this; // 目的是为了实现链式写法

}

var ary = [12,23,23,13,12,23,13]

链式写法:执行完成数组的一个方法可以紧接着执行下一个方法

  原理:

    ary为什么可以使用sort方法,因为sort是Array.prototype上的公有的方法,而数组ary是Array这个类的一个实例,所以ary可以使用sort方法 ->数组才能使用Array原型上定

    义的属性和方法

  // sort执行完成的返回值是一个排序后的“数组”

  // reversez执行完成的返回值是一个数组,可以继续执行pop

  // pop执行完成的返回值是被删除的那个元素,不是一个数组了,在执行数组的方法就会报错

ary.sort(function(a,b){

  return a - b;

}).reverse().pop();

思考:

  

(5).plus(10).reduce(2)   5+10-2

Number.prototype.plus=function(n){}

Number.prototype.reduce=function(n){}

原文地址:https://www.cnblogs.com/z-dl/p/8927094.html