1. 程式人生 > >原型,原型鏈,作用域鏈

原型,原型鏈,作用域鏈

原型,原型鏈,作用域鏈

原型是物件的內部屬性,在JavaScript中,一共有兩種型別的值,原始值和物件值.每個物件都有一個內部屬性[[prototype]],我們通常稱之為原型.
原型的值可以是一個物件,也可以是null.如果它的值是一個物件,則這個物件也一定有自己的原型.這樣就形成了一條線性的鏈,我們稱之為原型鏈(比如我們新建一個數組,陣列的方法就是從陣列的原型上繼承而來的)
  
**作用域是針對變數的,**比如我們建立了一個函式,函式裡面又包含了一個函式,那麼現在就有三個作用域

全域性作用域==>函式1作用域==>函式2作用域

作用域的特點就是,先在自己的變數範圍中查詢,如果找不到,就會沿著作用域往上找。

如:

var a = 1;
function b(){
    var a = 2;
    function c(){
        var a = 3;
        console.log(a);
    }
    c();
}
b();

最後打印出來的是3,因為執行函式c()的時候它在自己的範圍內找到了變數a所以就不會越上繼續查詢,如果在函式c()中沒有找到則會繼續向上找,一直會找到全域性變數a,這個查詢的過程就叫作用域鏈

不知道你有沒有疑問,函式c為什麼可以在函式b中查詢變數a,因為函式c是在函式b中建立的,也就是說函式c的作用域包括了函式b的作用域,當然也包括了全域性作用域,但是函式b不能向函式c中查詢變數,因為作用域只會向上查詢

原型鏈是針對建構函式的,比如我先建立了一個函式,然後通過一個變數new了這個函式,那麼這個被new出來的函式就會繼承創建出來的那個函式的屬性,然後如果我訪問new出來的這個函式的某個屬性,但是我並沒有在這個new出來的函式中定義這個變數,那麼它就會往上(向創建出它的函式中)查詢,這個查詢的過程就叫做原型鏈

Object ==> 建構函式1 ==> 建構函式2

就和css中的繼承一樣,如果自身沒有定義就會繼承父元素的樣式。

function a(){};
a.prototype.name = “追夢子”;
var b = new a();
console.log(

b.name); //追夢子
轉自:https://www.cnblogs.com/pssp/p/5204324.html