js筆記三十五之原型鏈模式擴充套件(2)

wyfem發表於2021-09-09

在原型模式中,this常用的有兩種情況:

  1. 在類中 this.xxx=xxx; this -> 當前類的例項

  2. 某一個方法中的this -> 看執行的時候 . 前面是誰this就是誰

    1. 需要先確定this的指向(this是誰);

    2. 把this替換成對應的程式碼

    3. 按照原型鏈查詢機制, 一步步的查詢結果

function Fn(){    this.x = 100;    this.y = 200;
}
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) => 100f.__proto__.getX() // -> undefined  => this是f.__proto__ => console.log(f.__proto__.x)[忽略私有,直接找原型] => undefinedFn.prototype.getX(); // -> undefinedf.getY(); // -> 200f.__proto__getY() // -> 300
// 在內建類的原型上擴充套件陣列去重方法Array.prototype.myUnique = function(){    // this -> 
    var obj = {};    for(var i=0;i this -> Array.prototype

鏈式寫法: 執行完成陣列的一個方法可以緊接著執行下一個方法
ary為什麼可以使用sort方法? -> 因為sort是Array.prototype上的公有的方法,而陣列ary是Array這個類的一個例項,所以ary可以使用sort方法 -> 陣列才能使用Array原型上定義的屬性和方法
sort執行完成的返回值是一個排序後的陣列,可以繼續執行reverse
reverse執行完成的返回值是一個陣列,可以繼續執行pop
pop執行完成的返回值是一個被刪除的那個元素

ary.sort(function(a,b){    return a-b;
}).reverse().pop();

思考練習:

在陣列的原則上有一個方法叫做slice, 自己實現一個方法mySlice, 要求和原來的slice功能一模一樣

Array.prototype.mySlice = function(){    // js code...}

考慮情況:
slice(n,m)
slice(n)
slice()
n和m是負數
nn和m的值超過陣列的長度
n和m不是有效數字
...



作者:uplyw
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2894/viewspace-2814070/,如需轉載,請註明出處,否則將追究法律責任。

相關文章