摘要:構造函數屬性名屬性值,方法名自由屬性和原型屬性自由屬性通過對象的引用添加的屬性。屬性上述代碼說明對象存在一個指向構造函數的原型,這個鏈接被叫做屬性只能在調式時使用。
原型
原型是聲明
在JavaScript中, 函數時一個包含屬性和方法的Function類型的對象。而原型(Prototype)就是Function類型對象的一個屬性。在函數定義是就包含了protopype屬性,它的出事值時一個空對像。在JavaScript中并沒有定義函數的圓形類型,所以原型可以時任何類型。 原型時用于保護對象的共享屬性和方法的,原型的屬性和方法并不會影響函數本身的屬性和方法。
function foo (a,b){
return a+b;
}
console.log (typeof foo.prototyoe);//boject
獲取原型
通過如下兩種方式可以獲取對象的原型,從而設置共享的屬性和方法:
通過構造函數的prototype屬性
function person(){
console.log ("person instantiated");
}
console.log(person.prototype);
通過Object對象的getPrototypeOf(obj)方法。
function Person(){
console.log (person instantiated);
}
console.log(Object.getprototypeOf(person));
原型的屬性和方法
通過如下兩種方式可以設置原型的屬性和方法。
構造函數.Prototype.屬性名+屬性值;
構造函數.prototype.方法名=function(){}
直接為原型定義一個新對象。
構造函數.prototype={
屬性名:屬性值,
方法名:function(){}
}
自由屬性和原型屬性
自由屬性: 通過對象的引用添加的屬性。其他對象可能無此屬性:即使有,也是彼此獨立的屬性。
原型屬性:從原型屬性對象中繼承來的屬性,一旦原型屬性中屬性改變,所有繼承原型屬性對象屬性均改變。
function Emo(ename,salary){
this.ename=ename;
this.salary=salary;
}
Emp.prototype={city:北京市,dept:研發部}
var emp1 =new Emp("Mary",3800);
var emp2 =new Emp("tmp",3000);
檢測自由或原有屬性
使用hasOwnPrototype()方法檢測對象時否具有指定的自有屬性:
function Hero(){}
var hero = new Hero()
console.log(hero.hasOwnPrototype("name"));
使用in關鍵字檢測對象及其原型鏈中是否具有指定的屬性:
function Hero(){}
var hero=new Hero();
console.;log("name"in hero);
擴展屬性或方法
通過原型看為指定構造函數或對象擴展其屬性或方法,如下代碼實例:
function Hero (){}
Hero.protoptype={
name:"Mary",
salary:3800}
var hero =new Hero();
console.log (hero.name);//mary
重寫原型屬性
通過構造函數或對象的自由屬性可以重寫原型的屬性, 如下代碼示例:
function Hero(){}
Hero.prototype={
name:"Mary",
salary:3800
}
var hero = new Hero();
hero.name="tom";
console.log(hero,name);//tom
刪除屬性
通過delete關鍵詞可以刪除對象的屬性,如果該對象即具有原型屬性又具有既有屬性的話, 先刪除自由屬性,在刪除原型屬性。如下代碼示例:
function Hero(){}
Hero.prototype= {name:"Mary",salary:3800}
var hero =new Hero();
hero.name ="Tom";
delete hero.name;//刪除Tom
console.log(hero.name);//mary
delete hero.name;//刪除Mary
console.log(hero.name);//undefind
isprototypeOf()方法
每一個對象都會具有一個isPrototypeOf()方法,該方法用來判斷一個對象是否時另一個對象的原型。
var monkey= {}
function Human(){}
Human.prototype= monkey;
var man = new Human();
monkey.isPrototypeOf(man);//true
__proto__屬性
function Hero (){}
Hero.prototype={
name:"mary",
salay:3800
}
var hero =new Hero();
console.log(hero.name);//maey
上述代碼說明hero 對象存在一個指向構造函數Hero的原型,這個鏈接被叫做————proto————屬性只能在調式時使用。
————proto————屬性時指定對象的屬性。
prototype屬性時指定構造函數的屬性
擴展內建對象
JavaScript中的內置對象有些具有prototype屬性,利用內置對象prototype屬性可以為內置對象擴展屬性或方法。通過原型屬性擴展內置對象的屬性和方法非常靈活,根據個性化要求制定JavaScript語言的具體內容。一般建議慎用這種方式,如果JavaScript的版本更新時可能會提供個性化屬性或方法,導致沖突。
Array.prototype.inArray =fuction (color){
if (this)[i]===color {return true;}
}
return false;
}
var a =["red","green","blue"];
console.log (a.inArray("red"));//true
console.log(a.inArray("yellow"));//false
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/108261.html
摘要:先來一個構造函數構造一個人類實例化一個對象看看的名字是什么打印結果先說一個前提只要是函數,就會有一個屬性,可以理解為子代的原型遺傳基因只要是對象,就會有一個方法,可以理解為向上尋找原型的方法。 關于javascript中的原型和原型鏈 我GitHub上的菜鳥倉庫地址: 點擊跳轉查看其他相關文章 文章在我的博客上的地址: 點擊跳轉 ? ? ? ? 關于javascript中的原型和原...
摘要:三組合繼承結合原型鏈方式和借用構造函數方式的有點,進行改進的一種繼承方式。四寄生組合式繼承為了解決組合繼承中子構造函數的原型鏈出現冗余的屬性和方法,引入的一種繼承方式。 說在前面:為了使代碼更為簡潔方便理解, 本文中的代碼均將非核心實現部分的代碼移出。 一、原型鏈方式關于原型鏈,可點擊《深入淺出,JS原型鏈的工作原理》,本文不再重復敘述。 思路:讓子構造函數的原型等于父構造函數的實例...
摘要:忍者級別的函數操作對于什么是匿名函數,這里就不做過多介紹了。我們需要知道的是,對于而言,匿名函數是一個很重要且具有邏輯性的特性。通常,匿名函數的使用情況是創建一個供以后使用的函數。 JS 中的遞歸 遞歸, 遞歸基礎, 斐波那契數列, 使用遞歸方式深拷貝, 自定義事件添加 這一次,徹底弄懂 JavaScript 執行機制 本文的目的就是要保證你徹底弄懂javascript的執行機制,如果...
摘要:然而,臨近規范發布時,有建議提及未來的版本號切換為編年制,比如用同來指代在年末前被定稿的所有版本。總得來說就是版本號不再那么重要了,開始變得更像一個萬古長青的活標準。 你不知道的JS(下卷)ES6與之未來 第一章:ES的今與明 在你想深入這本書之前,你應該對(在讀此書時)JavaScript的最近標準掌握熟練,也就是ES5(專業來說是ES 5.1)。在此,我們決定全方面地談論關于將近的...
閱讀 3149·2021-11-22 13:54
閱讀 3435·2021-11-15 11:37
閱讀 3598·2021-10-14 09:43
閱讀 3496·2021-09-09 11:52
閱讀 3595·2019-08-30 15:53
閱讀 2457·2019-08-30 13:50
閱讀 2055·2019-08-30 11:07
閱讀 885·2019-08-29 16:32