js筆記三十四之原型鏈模式擴充套件(1)
原型鏈模式擴充套件
批次設定原型上的公有屬性
function Fn(){ this.x = 100; } Fn.prototype.getX = function(){ }; Fn.prototype.getY = function(){ }; Fn.prototype.getZ = function(){ };var f1 = new Fn;
起一個別名
function Fn(){ this.x = 100; }var pro = Fn.prototype; // 把原來原型指向的地址賦值給pro,現在它們操作的是同一個記憶體空間pro.getX = function(){ }; pro.getY = function(){ }; pro.getZ = function(){ };var f1 = new Fn;
重構原型物件的方式 -> 自己新開闢一個堆記憶體,儲存我們共有的屬性和方法,把瀏覽器原來給Fn.prototype開闢的那個替換掉
function Fn(){ this.x = 100; } Fn.prototype = { constructor: Fn, // 手動新增constructor x: function(){ }, y: function(){ } };var f1 = new Fn; f.a(); f.b();//1. 只有瀏覽器天生給Fn.prototype 開闢的堆記憶體裡面才有constructor,// 而我們自己開闢的這個堆記憶體沒有這個屬性,這樣constructor指向就不再是Fn而是Object了// 為了和原來的保持一致, 我們需要手動的增加constructor的指向console.log(f.constructor) // -> (沒做任何處理之前) Object
a. 只有瀏覽器天生給Fn.prototype 開闢的堆記憶體裡面才有constructor, 而我們自己開闢的這個堆記憶體沒有這個屬性,這樣constructor指向就不再是Fn而是Object了
為了和原來的保持一致, 我們需要手動的增加constructor的指向
function Fn(){ this.x = 100; } Fn.prototype = { constructor: Fn, // 手動新增constructor y: function(){ }, z: function(){ } };var f1 = new Fn; f1.y(); f1.z();console.log(f1.constructor) // ->Fn(){ this.x = 100; }
b. 用這種方式給內建類增加公有的屬性
給內建類Array增加陣列去重的方法
Array.prototype = { constructor: Array, unique: function(){ } }
這種方式會把之前已經存在於原型上的屬性和方法給替換掉, 所以用這種凡是修改內建類的話,瀏覽器是會遮蔽掉的
var ary = [1,2,2,1,2,3,4,2,1,3]; ary.sort();console.log(ary); // -> [1, 1, 1, 2, 2, 2, 2, 3, 3, 4]
但是可以一個個的修改內建的方法,當我們透過下述方式在陣列的原型上增加方法,如果方法名和原來內建的重複了,會把人家內建的修改掉 -> 以後在內建類的原型上增加方法,命名都需要加特殊的字首;
Array.prototype.sort = function(){ console.log(this) // this -> ary 當前要操作的這個陣列 // [1,2,2,1,2,3,4,2,1,3]}var ary = [1,2,2,1,2,3,4,2,1,3]; ary.sort();console.log(ary); // -> [1,2,2,1,2,3,4,2,1,3]
作者:uplyw
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2035/viewspace-2814077/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- js筆記三十五之原型鏈模式擴充套件(2)JS筆記原型模式套件
- JavaScript擴充套件原型鏈淺析JavaScript套件原型
- 前端筆記——JS基礎(原型&&原型鏈)前端筆記JS原型
- 可擴充套件性筆記一套件筆記
- 深入學習js之——原型和原型鏈#1JS原型
- 第200天:js---常用string原型擴充套件JS原型套件
- 學習筆記----擴充套件歐幾里德筆記套件
- mac安裝PHP擴充套件之pcntl遇坑筆記MacPHP套件筆記
- Json擴充套件方法JSON套件
- C#學習筆記(補充)——擴充套件方法、事件C#筆記套件事件
- ASP.NET Core擴充套件庫之Http通用擴充套件ASP.NET套件HTTP
- 擴充套件包 Laravel-compass 使用筆記套件Laravel筆記
- swift學習筆記4——擴充套件、協議Swift筆記套件協議
- Swift學習筆記(二十六)——擴充套件Swift筆記套件
- 面試之JS篇 - 原型與原型鏈面試JS原型
- 原生js的三座大山之原型和原型鏈(1)JS原型
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- [外掛擴充套件]馬克筆記MarkDoc0.1套件筆記
- 擴充套件中國剩餘定理(EXCRT)學習筆記套件筆記
- .Net開發筆記(十七) 應用程式擴充套件筆記套件
- 技術筆記(10)Unity編輯器擴充套件筆記Unity套件
- php 擴充套件安裝(隨筆)PHP套件
- cc1擴充(正版鏈)
- C#學習筆記-方法引數、擴充套件方法C#筆記套件
- WCF擴充套件:行為擴充套件Behavior Extension套件
- 《JavaScript 闖關記》之原型及原型鏈JavaScript原型
- ES6語法學習筆記之陣列與擴充套件運算子筆記陣列套件
- Dubbo系列之 (一)SPI擴充套件套件
- DOM擴充套件之HTML5套件HTML
- PHP 操作 Redis 之 phpredis 擴充套件PHPRedis套件
- ES6之字串擴充套件字串套件
- 【記錄】安裝 maxminddb 擴充套件套件
- [記錄] 安裝 maxminddb 擴充套件套件
- [WPF]標記擴充套件(Markup Extension)套件
- Chrome瀏覽器擴充套件開發系列之十九:擴充套件開發示例Chrome瀏覽器套件
- [譯]擴充套件 Node.js 應用套件Node.js
- JS筆記—— 物件 (原型物件)JS筆記物件原型
- JS原型和原型鏈JS原型