国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

前端筆記——JS基礎(chǔ)(原型&&原型鏈)

n7then / 2745人閱讀

摘要:基礎(chǔ)原型原型鏈構(gòu)造函數(shù)默認(rèn)有這一行張三李四構(gòu)造函數(shù)擴(kuò)展其實(shí)是的語(yǔ)法糖其實(shí)是的語(yǔ)法糖其實(shí)是使用判斷一個(gè)函數(shù)是否是一個(gè)變量的構(gòu)造函數(shù)原型規(guī)則和示例所有的引用類型數(shù)組對(duì)象函數(shù),都具有對(duì)象屬性即可自有擴(kuò)展的屬性,除外所有的引用類型數(shù)組對(duì)象函數(shù),

JavaScript基礎(chǔ) —— 原型&&原型鏈 構(gòu)造函數(shù)
  function Foo(name, age) {
    this.name = name;
    this.age = age;
    this.class = "class-1";
    //return this ; //默認(rèn)有這一行
  }
  var f = new Foo("張三", 22);
  var f1 = new Foo("李四", 29);
構(gòu)造函數(shù) - 擴(kuò)展
  var a={} 其實(shí)是 var a=new Object() 的語(yǔ)法糖
  var a=[] 其實(shí)是 var a=new Array() 的語(yǔ)法糖
  function Foo() {....} 其實(shí)是 var Foo=new Function(...)
  使用 instanceof 判斷一個(gè)函數(shù)是否是一個(gè)變量的構(gòu)造函數(shù)
原型規(guī)則和示例

所有的引用類型(數(shù)組、對(duì)象、函數(shù)),都具有對(duì)象屬性(即可自有擴(kuò)展的屬性),null除外

所有的引用類型(數(shù)組、對(duì)象、函數(shù)),都有一個(gè) __proto__ 屬性(隱式原型),屬性值是一個(gè)普通的對(duì)象

  var obj = { };
  obj.x=100;
  console.log(obj.__proto__);
  // {constructor: ?, __defineGetter__: ?, __defineSetter__: ?, hasOwnProperty: ?, __lookupGetter__: ?,?…}
  var arr = [];
  arr.x = 200;
  console.log(arr.__proto__);
  // [constructor: ?, concat: ?, find: ?, findIndex: ?, pop: ?,?…]
  function fn() {};
  fn.x = 300;
  console.log(fn.__proto__);
  // ? () { [native code] }
  var d = null;
  console.log(d.__proto__);
  // Uncaught TypeError: Cannot read property "__proto__" of null

所有的 函數(shù) ,都有一個(gè) prototype 屬性(顯式原型),屬性值也是一個(gè)普通對(duì)象

  console.log(fn.prototype);
  // {constructor: ?}

所有的引用類型(數(shù)組、對(duì)象、函數(shù)), __proto__ 屬性值指向它的構(gòu)造函數(shù)的 prototype 屬性值

  console.log(obj.__proto__ === Object.prototype);
  // true

當(dāng)視圖得到一個(gè)對(duì)象(所有的引用類型)的某個(gè)屬性時(shí),如果這個(gè)對(duì)象本身沒(méi)有這個(gè)屬性,那么會(huì)去它的 __proto__ (即它的構(gòu)造函數(shù)的 prototype )中尋找。

  // 構(gòu)造函數(shù)
  function Foo(name, age) {
    this.name = name;
  }
  Foo.prototype.alertName = function() {
    console.log("alertName" + this.name);
  }
  // 創(chuàng)建示例
  var f = new Foo("張三");
  f.prientname = function() {
    console.log("prientname" + this.name);
  }
  // 測(cè)試
  f.prientname(); // prientname張三
  f.alertName(); // alertName張三
原型鏈
  // 構(gòu)造函數(shù)
  function Foo(name, age) {
    this.name = name;
  }
  Foo.prototype.alertName = function() {
    console.log("alertName" + this.name);
  }
  // 創(chuàng)建示例
  var f = new Foo("張三");
  f.prientname = function() {
    console.log("prientname" + this.name);
  }
  // 測(cè)試
  f.prientname(); // prientname張三
  f.alertName(); // alertName張三

  f.toString(); // "[object Object]" 在f.__proto__.__proto__中查找,即Object的顯式原型中尋找

instanceof

instanceof 用于判斷 引用類型 屬于哪個(gè) 構(gòu)造函數(shù) 的方法

  // f的 __proto__ 一層一層網(wǎng)上找,找到對(duì)應(yīng)的 Foo.prototype
  f instanceof Foo //true
  f instanceof Object //true
q:如何準(zhǔn)確判斷一個(gè)變量是數(shù)組類型
  var arr=[]
  // 可以正確判斷的情況
  arr instanceof Array //true
  Object.prototype.toString.call(arr) // "[object Array]"
  Object.prototype.toString.apply(arr) // "[object Array]"
  Array.isArray(arr) // true
  // 不能判斷的情況
  typeof arr // object 是無(wú)法判斷是否是數(shù)組的
  // 不準(zhǔn)確
  arr.constructor === Array //true 但是原型鏈可以被改寫(xiě),這樣判斷不安全
  // 擴(kuò)展 兼容老版本瀏覽器,isArray的寫(xiě)法
  if(!Array.isArray){
    Array.isArray = function(arg){
      return Object.property.toString.call(arg) === "[object Array]"
    }
  }
q:寫(xiě)一個(gè)原型鏈繼承的例子
  function Elem(id) {
    this.elem = document.getElementById(id);
  }
  Elem.prototype.html = function(val) {
    var elem = this.elem;
    if (val) {
      elem.innerHTML = val;
      return this; // 后續(xù)的鏈?zhǔn)讲僮?    } else {
      return elem.innerHTML;
    }
  }
  Elem.prototype.on = function(type, fn) {
    var elem = this.elem;
    elem.addEventListener(type, fn);
    return this;
  }
  var main = new Elem("main")
  main.html("

Hello World

").on("click", function() { alert("Hello javascript") })
q:描述 new 一個(gè)對(duì)象的過(guò)程

創(chuàng)建一個(gè)對(duì)象

this 指向這個(gè)新對(duì)象

執(zhí)行代碼,即對(duì) this 賦值

返回 this

  function Foo(name, age) {
    this.name = name;
    this.age = age;
    this.class = "class-1";
    //return this ; //默認(rèn)有這一行
  }
  var f = new Foo("張三", 22);
  var f1 = new Foo("李四", 29);

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/95434.html

相關(guān)文章

  • 溫故js系列(15)-原型&原型&原型繼承

    摘要:給添加屬性給的原型對(duì)象添加屬性原型鏈在中,每個(gè)對(duì)象都有一個(gè)屬性,其保存著的地址就構(gòu)成了對(duì)象的原型鏈。實(shí)例變量實(shí)例函數(shù)原型鏈繼承有了原型鏈,就可以借助原型鏈實(shí)現(xiàn)繼承。是中唯一一個(gè)處理屬性但是不查找原型鏈的函數(shù)。 前端學(xué)習(xí):教程&開(kāi)發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調(diào)試&值得關(guān)注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:原型&原型鏈&原型繼承 JavaScript-原...

    Ethan815 評(píng)論0 收藏0
  • 《你不知道的javascript》筆記_對(duì)象&原型

    摘要:上一篇你不知道的筆記寫(xiě)在前面這是年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響年是向上的一年在新的城市穩(wěn)定連續(xù)堅(jiān)持健身三個(gè)月早睡早起游戲時(shí)間大大縮減,學(xué)會(huì)生活。 上一篇:《你不知道的javascript》筆記_this 寫(xiě)在前面 這是2019年第一篇博客,回顧去年年初列的學(xué)習(xí)清單,發(fā)現(xiàn)僅有部分完成了。當(dāng)然,這并不影響2018年是向上的一年:在新的城市穩(wěn)定、...

    seasonley 評(píng)論0 收藏0
  • Deep in JS - 收藏集 - 掘金

    摘要:今天同學(xué)去面試,做了兩道面試題全部做錯(cuò)了,發(fā)過(guò)來(lái)給道典型的面試題前端掘金在界中,開(kāi)發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標(biāo)準(zhǔn)參考教程(alpha) - 前端 - 掘金來(lái)自《JavaScript 標(biāo)準(zhǔn)參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡(jiǎn)介 算法實(shí)現(xiàn) 選擇排序 簡(jiǎn)介 算法實(shí)現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...

    enali 評(píng)論0 收藏0
  • 匯總有關(guān)JS對(duì)象的創(chuàng)建與繼承

      之前也有和大家講過(guò)有關(guān)JS的對(duì)象創(chuàng)建和對(duì)象繼承,本篇文章主要為大家做個(gè)匯總和梳理。  JS中其實(shí)就是原型鏈繼承和構(gòu)造函數(shù)繼承的毛病,還有就是工廠、構(gòu)造、原型設(shè)計(jì)模式與JS繼承。 JS高級(jí)程序設(shè)計(jì)4:class繼承的重點(diǎn),不只是簡(jiǎn)簡(jiǎn)單單的語(yǔ)法而已。  對(duì)象創(chuàng)建  不難發(fā)現(xiàn),每一篇都離不開(kāi)工廠、構(gòu)造、原型這3種設(shè)計(jì)模式中的至少其一!  那JS為什么非要用到這種3種設(shè)計(jì)模式了呢??  我們先從對(duì)...

    3403771864 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<