首頁  >  文章  >  web前端  >  js中的原型鏈、閉包四種作用、繼承、命名空間、枚舉型別是什麼?

js中的原型鏈、閉包四種作用、繼承、命名空間、枚舉型別是什麼?

青灯夜游
青灯夜游轉載
2018-10-24 16:09:282605瀏覽

這篇文章帶給大家的內容是介紹js中的原型鏈、閉包四種作用、繼承、命名空間、枚舉類型是什麼? 。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有幫助。

原型鏈

JavaScript 物件是動態的屬性「套件」(指自己的屬性)。 JavaScript 物件有一個指向一個原型物件的鏈。當試圖存取一個物件的屬性時,它不僅在該物件上搜尋,還會搜尋該物件的原型,以及該物件的原型的原型,依次層層向上搜索,直到找到一個名字匹配的屬性或到達原型鏈的末尾。

在不影響origin的原型鏈的前提下,建立一個target複製origin的原型鏈

var inherit = (function(){
    var F = function (){};
    return function (Target, Origin){
        F.prototype = Origin.prototype; 
        Target.prototype = new F();
        Target.prototype.constructor = Target;   //目标函数的原型的构造函数定义为目标函数
        Target.prototype.uber = Origin.prototype; //uber超类,指的是目标函数的最终原型为Orign的原型
        }
    }())

繼承

一般公司常用立即執行函數寫入功能,而且呼叫一個init()初始化函數

程式碼中的callname()中的call作用是改變this指針,將name的this指向改為目前函數下的this 

注意的是要用return回傳函數

<script>
var init=(function(){
    var name ='辣鸡';
    function callname(){
        console.log(name);
        }
    return function(){
        callname();
        }
    }())
init();
</script>

列舉:

var org={
    name:'智障',
    sex:'男',
    height:178
}
for ( var proto in org ){
    console.log(org.proto)
}

這樣子會印三次undefined,因為此時會把proto當成物件的某個屬性,要把程式碼中的org.proto改為org[proto],否則會默認理解為org['proto']。

正常輸出如下,印出三個值,若想列印屬性,則直接console.log(proto)

對象的枚舉,三種方法:

for in -----> 1.instanceof             2.hasOwnProperty        3. in

1、instance of 

A instance of B

判斷A物件是不是B的建構子建構出來的

function Person(){}
var person = new Person();

#所以辨識陣列與物件的方法------->1. instanceof  2. to String   call        3.constructor

#1)var obj={}

#2)toString   call

#3)constructor

var obj = {}

看A物件的原型鏈上有沒有B的原型

#2、hasOwnProperty,判斷是否屬於自己的方法,可以排除原型的方法__proto__

var org={
    name:'智障',
    sex:'男',
    height:178,
    __proto__:{
        lastName:'zhang'
        }
    }for(var prop in org){    if(org.hasOwnProperty( prop )){
    console.log(prop)
    }
}var obj={};

3、in

in 和hasOwnProperty 情況類型,但是原型中的方法也存在方法列舉

當內部函數被保存在外部時,會產生閉包函數,閉包會導致原始作用域鏈不釋放,造成記憶體洩漏

#閉包四種功能:

1.實作公有變數  eg:累加器

2.可以做快取(儲存結構)

##3.實現封裝,屬性私有化

 4.模組化開發,防止污染全域變數(聖杯模式)

/用閉包定義公共函數,並令其可以存取私有函數和變量。這個方式也稱為 模組模式(module pattern)(聖杯模式)

以上是js中的原型鏈、閉包四種作用、繼承、命名空間、枚舉型別是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除