真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

prototype與__proto__在Javascript中有什么關(guān)系

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

創(chuàng)新互聯(lián)公司是一家專業(yè)提供吉木薩爾企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站制作、H5建站、小程序制作等業(yè)務(wù)。10年已為吉木薩爾眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。

一、構(gòu)造函數(shù):

構(gòu)造函數(shù):通過new關(guān)鍵字可以用來創(chuàng)建特定類型的對象的函數(shù)。比如像Object和Array,兩者屬于內(nèi)置的原生的構(gòu)造函數(shù),在運行時會自動的出現(xiàn)在執(zhí)行環(huán)境中,可以直接使用。如下:

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

var obj=new Object();//使用Object構(gòu)造函數(shù)創(chuàng)建了一個Object實例obj
obj.name="c";
obj.age=12;
alert(obj.name);//c

我們可以自定義的創(chuàng)建構(gòu)造函數(shù),并為其自定義屬性和方法,如:

//創(chuàng)建構(gòu)造函數(shù)Person
function Person(name,age){
 this.name=name;
 this.age=age;
 this.sayName=function(){
 alert(this.name)//
 };
}

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

注意以下幾點:

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

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

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

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

二、原型對象:

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

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

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

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

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

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

當(dāng)調(diào)用構(gòu)造函數(shù)創(chuàng)建一個新實例后,該實例的內(nèi)部將包含一個指針[[Prototype]],該指針指向創(chuàng)建它的構(gòu)造函數(shù)的原型,在腳本上沒有標(biāo)準(zhǔn)的方法來訪問[[Prototype]],但大多數(shù)瀏覽器都支持通過__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

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

 prototype與__proto__在Javascript中有什么關(guān)系

總結(jié):

①只要創(chuàng)建了一個函數(shù),該函數(shù)的原型對象也隨之同時被創(chuàng)建出來,原型對象中的屬性和方法被經(jīng)由其相對應(yīng)的構(gòu)造函數(shù)所創(chuàng)建的實例所共享

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

③每個對象的__proto__屬性都指向其構(gòu)造函數(shù)的原型

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


分享文章:prototype與__proto__在Javascript中有什么關(guān)系
標(biāo)題路徑:http://weahome.cn/article/pcsehp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部