91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

prototype與__proto__在Javascript中有什么關系

發布時間:2021-01-18 15:58:00 來源:億速云 閱讀:181 作者:Leah 欄目:web開發

這篇文章給大家介紹prototype與__proto__在Javascript中有什么關系,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

一、構造函數:

構造函數:通過new關鍵字可以用來創建特定類型的對象的函數。比如像Object和Array,兩者屬于內置的原生的構造函數,在運行時會自動的出現在執行環境中,可以直接使用。如下:

var arr = new Array();//使用Array構造函數創建了一個array實例arr
arr[0]="a";
arr[1]="b";
alert(arr);//a,b

var obj=new Object();//使用Object構造函數創建了一個Object實例obj
obj.name="c";
obj.age=12;
alert(obj.name);//c

我們可以自定義的創建構造函數,并為其自定義屬性和方法,如:

//創建構造函數Person
function Person(name,age){
 this.name=name;
 this.age=age;
 this.sayName=function(){
 alert(this.name)//
 };
}

//使用new關鍵字,來生成Person實例
var person1=new Person("Tom",22);
var person2=new Person("Jerry",21);
person1.sayName();//Tom
person2.sayName();//Jerry

注意以下幾點:

  • 構造函數的名字始終要以大寫字母開頭(主要是為了區別于非構造函數,也即是區別于普通函數)

  • 構造函數也就是函數,定義構造函數和定義普通函數的語法一樣。構造函數和普通函數的區別在于:使用他們的方式不同。任何函數只要使用new操作符來調用,那他就可以作為構造函數;不使用new操作符來調用就是普通函數

function Person(name,age){
 this.name=name;
 this.age=age;
 this.sayName=function(){
 alert(this.name)//
 };
}

//當做構造函數使用
var person=new Person("Tom",22);
person.sayName();//Tom 
//當做普通函數使用
Person("Jerry",30);//添加到window
sayName();//Jerry 等同于window.sayName();

二、原型對象:

每個函數都有一個prototype屬性,它是一個指向原型對象的指針,原型對象在定義函數時同時被創建,原型對象的用途是包含所有實例共享的屬性和方法

function Person(){
}
//自定義原型對象的屬性和方法
Person.prototype.name="Tom";
Person.prototype.age=25;
Person.prototype.sayName=function(){
 alert(this.name);
};
//原型對象中的所有屬性和方法 都會自動被所有實例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom

只要創建了一個新函數,每個函數在創建之后都會獲得一個prototype的屬性,這個屬性指向函數的原型對象(原型對象在定義函數時同時被創建),此原型對象又有一個名為“constructor”的屬性,反過來指向函數本身,達到一種循環指向,

如在上邊的例子中:alert(Person.prototype.constructor===Person);//會返回true

function Person(){}
alert(Person.prototype.constructor===Person);//true

三、__proto__(注意這里proto左右兩邊都有兩個"_")

當調用構造函數創建一個新實例后,該實例的內部將包含一個指針[[Prototype]],該指針指向創建它的構造函數的原型,在腳本上沒有標準的方法來訪問[[Prototype]],但大多數瀏覽器都支持通過__proto__來訪問。

function Person(){
}
//自定義原型對象的屬性和方法
Person.prototype.name="Tom";
Person.prototype.age=25;
Person.prototype.sayName=function(){
 alert(this.name);
};
//原型對象中的所有屬性和方法 都會自動被所有實例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom
alert(person1.__proto__===Person.prototype);//true

以上述的示例代碼為例,各個對象之間的關系如下圖所示:

 prototype與__proto__在Javascript中有什么關系

總結:

①只要創建了一個函數,該函數的原型對象也隨之同時被創建出來,原型對象中的屬性和方法被經由其相對應的構造函數所創建的實例所共享

②每個函數在創建之后都會獲得一個prototype的屬性,這個屬性指向該函數的原型對象

③每個對象的__proto__屬性都指向其構造函數的原型

關于prototype與__proto__在Javascript中有什么關系就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

澄迈县| 包头市| 宁海县| 重庆市| 南康市| 叶城县| 利辛县| 余庆县| 佳木斯市| 西盟| 鄂伦春自治旗| 石阡县| 阿克苏市| 南昌市| 红原县| 台北县| 北京市| 唐海县| 克山县| 敖汉旗| 东光县| 宣化县| 青海省| 平罗县| 山丹县| 灌阳县| 利辛县| 禄劝| 鹤峰县| 泰兴市| 阿图什市| 罗山县| 丰原市| 巴南区| 乐都县| 休宁县| 通江县| 定兴县| 磐安县| 马龙县| 沽源县|