亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JavaScript面向?qū)ο缶幊虒崿F(xiàn)模擬

 更新時間:2022年10月14日 09:25:44   作者:愛思考的豬  
面向?qū)ο缶幊?Object Oriented Programming)將現(xiàn)實世界中的復(fù)雜關(guān)系抽象成一個個對象,通過對象之間的分工合作對現(xiàn)實世界進行模擬

前言

每個對象都是一個功能中心,具有明確分工,可以處理信息,處理信息,發(fā)出信息。面向?qū)ο缶幊叹哂徐`活性、可復(fù)用性、模塊化等好處,適合更多合作完成的大型項目。

1. 構(gòu)造函數(shù)

構(gòu)造函數(shù)的功能是生成對象,生成具有相同結(jié)構(gòu)對象的函數(shù)。Java語言通過類實現(xiàn)面向?qū)ο?對象是類的實例,而Javascript則是通過構(gòu)造函數(shù)作為對象的模板,使用prototype實現(xiàn)繼承。

構(gòu)造函數(shù)的幾個特點

  • 構(gòu)造函數(shù)內(nèi)部使用了this關(guān)鍵字作為被生成的對象
  • 構(gòu)造函數(shù)配合new 操作符使用
  • 構(gòu)造函數(shù)的第一個字符一般大寫用來區(qū)分普通函數(shù)
  • 構(gòu)造函數(shù)默認返回一個新對象(this),如果手動返回值是引用數(shù)據(jù)類型會覆蓋默認的返回值
function Person(name ){
  this.name = name;
};
const jack = new Person('jack'); //Person {name: 'jack'}
function Person(name ){
  this.name = name;
  return name;
};
const jack = new Person('jack'); //Person {name: 'jack'}
function Person(name ){
  this.name = name;
  return ['jack'];
};
const jack = new Person('jack'); //['jack']

2. new的過程

  • 生成一個新對象綁定給this
  • 將新對象的原型設(shè)置為構(gòu)造函數(shù)的prototype屬性
  • 執(zhí)行代碼,往this上添加屬性
  • 返回this

2.1 基礎(chǔ)使用

function Person(name ){
  this.name = name;
};
const jack = new Person('jack');
const tom = new Person('tom');
console.log(jack); //Person {name: 'jack'}
console.log(tom); //Person {name: 'tom'}

直接執(zhí)行構(gòu)造函數(shù)會怎么樣?

function Person(){
  this.name = name;
};
const jack = Person('jack'); //undefined

構(gòu)造函數(shù)的this指向了window,并沒有返回一個對象,我們現(xiàn)在做以下兼容:

function Person(name){
 if(!(this instanceof Person)){
  return new Person(name);
 };
 this.name = name;
};

現(xiàn)在可以直接使用了

Person(name); //Object { name: "jack" }

2.2 new.target

在函數(shù)內(nèi)部都可以使用new.target,如果函數(shù)是通過new.target調(diào)用的則返回被調(diào)用的構(gòu)造函數(shù)否則返回undefined

function Person(){
  console.log(new.target);
};
new Person(); //function Person(){...}
Person(); //undefined

現(xiàn)在使用new.target進行構(gòu)造函數(shù)的兼容

    function Person(name){
      if(!(new.target === Person)){
           return new Person(name);
      };
      this.name = name;
    };
    console.log(Person('jack')); //Object { name: "jack" }

3. 手動實現(xiàn)一個構(gòu)造函數(shù)

  function myNew() {
      const args = Array.prototype.slice.call(arguments);
      const construct = args.shift();
      //創(chuàng)建this,并將原型設(shè)置為構(gòu)造函數(shù)的prototype
      const context = Object.create(construct.prototype);
      //執(zhí)行構(gòu)造函數(shù),注意這里參數(shù)是數(shù)組形式所以使用apply
      construct.apply(context, args);
      //返回
      const res = construct();
      if ((typeof res === 'object' || res === 'function') && typeof res !== 'null') {
        return res;
      } {
        return context;
      }
    };
    function Person(name, age) {
      this.name = name;
      this.age = age;
    };
    const jack = myNew(Person, 'jack', 21);
    //Person {name: 'jack', age: 21}

到此這篇關(guān)于JavaScript面向?qū)ο缶幊虒崿F(xiàn)模擬的文章就介紹到這了,更多相關(guān)JS面向?qū)ο髢?nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js中值引用和地址引用實例分析

    js中值引用和地址引用實例分析

    這篇文章主要介紹了js中值引用和地址引用,結(jié)合實例形式分析了javascript值引用和地址引用相關(guān)原理、用法及操作注意事項,需要的朋友可以參考下
    2019-06-06
  • Javascript函數(shù)式編程簡單介紹

    Javascript函數(shù)式編程簡單介紹

    什么是函數(shù)式編程?根據(jù)百度百科的描述,“函數(shù)式編程是種編程典范,它將電腦運算視為函數(shù)的計算。函數(shù)編程語言最重要的基礎(chǔ)是 λ 演算(lambda calculus)。而且λ演算的函數(shù)可以接受函數(shù)當作輸入(參數(shù))和輸出(返回值)?!?/div> 2015-10-10
  • js實現(xiàn)隨屏幕滾動的帶緩沖效果的右下角廣告代碼

    js實現(xiàn)隨屏幕滾動的帶緩沖效果的右下角廣告代碼

    這篇文章主要介紹了js實現(xiàn)隨屏幕滾動的帶緩沖效果的右下角廣告代碼,涉及javascript基于數(shù)學運算及定時函數(shù)動態(tài)操作頁面元素的實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 學習JavaScript設(shè)計模式(接口)

    學習JavaScript設(shè)計模式(接口)

    這篇文章主要帶領(lǐng)大家學習JavaScript設(shè)計模式,其中重點介紹接口,舉例說明什么是接口,對接口進行詳細剖析,感興趣的小伙伴們可以參考一下
    2015-11-11
  • JavaScript原生數(shù)組Array常用方法

    JavaScript原生數(shù)組Array常用方法

    在入門Vue時, 列表渲染一節(jié)中提到數(shù)組的變異方法, 其中包括push(), pop(), shift(), unshift(), splice(), sort(), reverse(), 而concat()和slice()不屬于變異方法. 在這里就復(fù)習一下Array所提供的這幾個方法的使用
    2017-04-04
  • javascript 自動標記來自搜索結(jié)果頁的關(guān)鍵字

    javascript 自動標記來自搜索結(jié)果頁的關(guān)鍵字

    使用javascript自動標記來自搜索結(jié)果頁的關(guān)鍵字的實現(xiàn)代碼。
    2010-01-01
  • js中點擊空白區(qū)域時文本框與隱藏層的顯示與影藏問題

    js中點擊空白區(qū)域時文本框與隱藏層的顯示與影藏問題

    文本框獲得焦點的時在文本框的下方顯示一個浮動層,點擊文本框隱藏浮動層,下面為大家介紹下鼠標點擊時文本框與隱藏層處理問題,感興趣的朋友可以參考下
    2013-08-08
  • JavaScript學習筆記之ES6數(shù)組方法

    JavaScript學習筆記之ES6數(shù)組方法

    ES6給數(shù)組添加了一些新特性,而這些新特性到目前為止完全可以運用到自己的業(yè)務(wù)層。在這一節(jié)中將總結(jié)有關(guān)于ES6給數(shù)組提供一些新特性的使用方法
    2016-03-03
  • 淺談JS驗證表單文本域輸入空格的問題

    淺談JS驗證表單文本域輸入空格的問題

    下面小編就為大家?guī)硪黄獪\談JS驗證表單文本域輸入空格的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • JS技巧之一行賦值語句能玩出多少花樣

    JS技巧之一行賦值語句能玩出多少花樣

    很多前端只會謝謝頁面,一讓他們接觸js,就非常害怕,下面這篇文章主要給大家介紹了關(guān)于JS技巧之一行賦值語句能玩出多少花樣的相關(guān)資料,需要的朋友可以參考下
    2022-10-10

最新評論