亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

javascript面向?qū)ο蟪绦蛟O(shè)計(一)

2019-11-20 13:17:47
字體:
供稿:網(wǎng)友

注釋里講解的十分細(xì)致了,這里就不多廢話了,直接上代碼:

<script type="text/javascript">  //ECMA-262把對象定義為:“無序?qū)傩缘?集合,其屬性可以包含基本值、對象或者函數(shù)”  //理解對象,最簡單的方式就是通過創(chuàng)建一個Object的實例,然后為它添加屬性和方法  var person = new Object();  person.name = "Xulei";  person.age = "23";  person.job = "前端工程師";  person.sayName = function () {   alert(this.name);  }  //還可以這樣寫  var person = {   name: "xulei",   age: 23,   job: "前端工程",   sayName: function () {    alert(this.name)   }  }  //一、屬性類型:數(shù)據(jù)屬性和訪問其屬性  //1、數(shù)據(jù)屬性,有4個描述其行為的特性  //[Configurable]:表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性,默認(rèn)值為true  //[Enumerable]:表示能否通過for-in返回屬性,默認(rèn)值為true  //[Writable]:表示能否修改屬性,默認(rèn)值為true  //[Value]:包含這個屬性的數(shù)據(jù)值。默認(rèn)值為undefined  var person = {   name: "xulei"  }  //這里創(chuàng)建了一個person對象,value值就是“xulei”  //要修改屬性的默認(rèn)特性,必須使用ECMAScript5的Object.defineProperty(屬性所在的對象,屬性的名字,描述符對象)  //描述符對象必須是configurable、enumerable、writable、value  var peron = {}  Object.defineProperty(peron, "name", {   writable: false,//屬性不能被修改   value: "徐磊-xulei"  });  alert(peron.name);//徐磊-xulei  peron.name = "徐磊";  alert(peron.name);//徐磊-xulei  //以上操作在非嚴(yán)格模式下賦值操作會被忽略,如果在嚴(yán)格模式下會拋出異常  //一旦把屬性定義為不可配置的就不能把它變回可配置的了。  //在多數(shù)情況下都沒有必要利用Object.defineProperty()方法提供的這些高級功能。但是對理解javascript非常有用。  //建議讀者不要在ie8上使用此方法。  //2、訪問其屬性,有4個特性  //[Configurable]:表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性的特性,或者能否把屬性修改為訪問器屬性,默認(rèn)值為true  //[Enumerable]:表示能否通過for-in返回屬性,默認(rèn)值為true  //[Get]:在讀取時調(diào)用的函數(shù) 默認(rèn)值undefined  //[Set]:在寫入屬性時調(diào)用的函數(shù) 默認(rèn)值Undefined  var book={   _year:2004,   edition:1  }  Object.defineProperty(book,"year",{   get:function(){    return this._year;   },   set:function(value){    if(value>2004){     this._year=value;     this.edition +=value-2004;    }   }  });  book.year=2005;  alert(book.edition);//2  //創(chuàng)建對象  //1、將構(gòu)造函數(shù)當(dāng)做函數(shù)  function Person(name,age,job) {   this.name=name;   this.age=age;   this.job=job;   this.sayName=function(){    alert(this.name);   }  }  //當(dāng)做構(gòu)造函數(shù)使用  var person=new Person("xulei",23,"software");  person.sayName();  //作為普通函數(shù)使用  Person("xulei2",23,"job2");//添加到window中  window.sayName();  //在另一個對象的作用域中調(diào)用  var o=new Object();  Person.call(o,"xulei3",23,"job3");  o.sayName(); </script>

再來一段:

<script type="text/javascript">    //1、理解原型對象    //2、原型與in操作符    //3、更簡單的原型語法    //4、原型的動態(tài)性    //5、原生對象原型    //6、原型對象的問題    //1、無論什么時候,只要創(chuàng)建了一個函數(shù),就會根據(jù)一組特定的規(guī)則,為該函數(shù)創(chuàng)建一個prototype屬性,該屬性指向函數(shù)的原型對象    //在默認(rèn)情況下,所有的原型對象都會自動獲得一個constructor(構(gòu)造函數(shù))屬性,這個屬性包含一個指向prototype屬性所在函數(shù)的指針    //如    function Person(){    }    //Person.prototype.constructor 指向Person    //創(chuàng)建了自定義的構(gòu)造函數(shù)之后,其原型對象默認(rèn)只會取得constructor屬性,至于其他方法則都是從Object繼承而來    //當(dāng)調(diào)用函數(shù)的創(chuàng)建一個新實例之后,該實例的內(nèi)部包含一個指針(內(nèi)部屬性)指向構(gòu)造函數(shù)的原型對象    //在Firefox、safari、chrome在每個對象上都支持一個屬性_proto_訪問    var p1=new Person();    alert(Person.prototype.isPrototypeOf(p1))    alert(Object.getPrototypeOf(p1)==Person.prototype)    //雖然可以通過對象實例訪問保存在原型中的值,但卻不能通過對象實例重寫原型中的值。如果我們在實例中添加了一個屬性    //而該屬性的名稱與原型的中的實例同名,那我們就在實例中創(chuàng)建該屬性,該屬性將會屏蔽原型中的那個屬性。eg:    function Person() {    }    Person.prototype.name="amber";    Person.prototype.age=23;    Person.prototype.job="software engineer";    Person.prototype.sayName=function(){      alert(this.name)    }    var person1=new Person();    var person2=new Person();    person1.name="amber.Xu";    alert(person1.name);//amber.xu --來自實例    alert(person2.name);//amber --來自原型    delete person1.name;    alert(person1.name);//amber --來自原型    //使用hasOwnProperty()方法可以檢測一個屬性是存在于實例中還是存在于原型中,這個方法(從Object繼承而來)    //只在給定屬性存在于對象實例中時,才會返回true    function Person() {    }    Person.prototype.name="amber";    Person.prototype.age=23;    Person.prototype.job="software engineer";    Person.prototype.sayName=function(){      alert(this.name)    }    var person1=new Person();    var person2=new Person();    alert(person1.hasOwnProperty("name"));//false 來自實例    alert(person2.hasOwnProperty("name"));//false 來自實例    person1.name="amber.xu";    alert(person1.name);    alert(person1.hasOwnProperty("name"));//true 來自實例    delete person1.name;    alert(person1.name);    alert(person1.hasOwnProperty("name"));//false 來自原型    //2、原型與in操作符    //in 有兩種使用方式,一個是的單獨使用和在for-in 中使用。在單獨使用時,in操作符會在對象能夠訪問給定屬性時返回true    //無論該屬性時來自原型還是實例    function Person() {    }    Person.prototype.name="amber";    Person.prototype.age=23;    Person.prototype.job="software engineer";    Person.prototype.sayName=function(){      alert(this.name)    }    var person1=new Person();    var person2=new Person();    alert("name" in person1);//true 來自原型    alert("name" in person2);//true 來自原型    alert("height" in person1);//false    //這樣就可以封裝一個函數(shù)(給定屬性是否是來給定對象的原型)    function hasPrototypeProperty(object,name){      return !object.hasOwnProperty(name) && (name in object);    }    alert("----------------------------------");    alert(hasPrototypeProperty(person1,"name"));//true    person1.name="張三";    alert(hasPrototypeProperty(person1,"name"));//false    //使用for-in 返回的是所有能夠通過對象訪問、可枚舉的屬性,其中既包含原型屬性也包含實例屬性。    //屏蔽了原型中不可枚舉屬性(將Enumerable標(biāo)記為false的屬性)的實例屬性也會在for-in中返回    //ie早期版本總中有一個bug:屏蔽了原型中不可枚舉屬性的實例屬性也不會在for-in中返回    //eg:    var o={      toString:function(){        return "my object";      }    };    for(var prop in o){      if(prop=="toString"){        alert("找到了");//在ie早期版本中不會顯示      }    }    //要取得對象上所有可枚舉的屬性,可以使用ECMAScript5的Object.keys()方法。接受一個對象作為參數(shù),    //包含所有可枚舉屬性的字符串?dāng)?shù)組    function Person() {    }    Person.prototype.name="amber";    Person.prototype.age=23;    Person.prototype.job="software engineer";    Person.prototype.sayName=function(){      alert(this.name)    }    var person1=new Person();    var person2=new Person();    var keys=Object.keys(Person.prototype);    alert(keys)    person1.name="amber.Xu";    person1.age=23;    var keys=Object.keys(person1);    alert(keys)    alert("-----------------------------------------")    //如果想要得到所有的實例屬性不管他是否可以枚舉,都可以使用    alert(Object.getOwnPropertyNames(person1));    alert(Object.getOwnPropertyNames(Person.prototype));    alert("更簡單的原型語法-----------------------------------------")    //3、更簡單的原型語法    function Person() {    }    Person.prototype={      name:"AMBER",      age:23,      job:"software",      sayName:function(){        alert(this.name)      }    }    //這樣寫之后constructor屬性不再指向Person函數(shù),而是指向Object構(gòu)造函數(shù)。    //盡管通過instanceof操作符還能返回正確的結(jié)果,但是通過constructor已經(jīng)無法確定對象的類型了,eg:    var friend=new Person();    alert(friend instanceof Person)//true    alert(friend instanceof Object)//true    alert(friend.constructor==Person);//false    alert(friend.constructor==Object);//true    //如果constructor對你真的很重要,可以向下面一樣設(shè)置成適當(dāng)?shù)闹?   function Person() {    }    Person.prototype={      constructor:Person,      name:"AMBER",      age:23,      job:"software",      sayName:function(){        alert(this.name)      }    }    var friend=new Person();    alert("手動設(shè)置constructor-----------------------------------------")    alert(friend.constructor==Person);//true    //這種手動的添加了constructor會使constructor變成可枚舉的元(原生的constructor屬性時不可枚舉的)。    //這種情況下就可以使用    Object.defineProperty(Person.prototype,"constructor",{      enumerable:false,      value:Person    });    //原型的動態(tài)性    var friend=new Person();    Person.prototype.sayHi=function(){      alert("Hi");    }    friend.sayHi();//Hi (正常執(zhí)行)    //因為實例和原型之間是松散的連接關(guān)系,實例與原型之間的連接只不過是一個指針,而非副本    //當(dāng)我們調(diào)用sayHi()方法時,首先會在實例中搜索名為sayHi的方法,在沒找到的情況下會搜索原型。    //但是,如果是重寫整個原型對象,那么情況就不一樣了。    //我們知道,調(diào)用構(gòu)造函數(shù)時會為實例添加一個指向最初原型的Prototype指針,而把原型修改為另一個對象就等于切斷了構(gòu)造函數(shù)與最初原型之間的聯(lián)系。    //請記?。簩嵗械闹羔槂H指向原型,而不指向構(gòu)造函數(shù)。eg:    function A(){}    var a1=new A();    A.prototype={      constructor:A,      name:"AMBER",      age:23,      job:"software",      sayName:function(){        alert(this.name)      }    }    alert("ERROR-------------------------------------");    alert(a1.sayName());    //我們創(chuàng)建了一個A的實例,然后又重寫了其原型對象,然后在調(diào)用a1.sayName()發(fā)生了錯誤,因為a指向的原型中不包含以該名字命名的屬性/方法    //原生對象的原型    //原型模式的重要性不僅體現(xiàn)在創(chuàng)建自定義類型方面。就連所有的原生的引用類型,都是采用這種模式創(chuàng)建的。所有的原生引用類型    //都在其構(gòu)造函數(shù)的原型上定義的方法 eg:    alert(typeof Array.prototype.sort);//function    alert(typeof String.prototype.substring);//function    //不僅可以在原生對象的原型取得雖有默認(rèn)方法的引用,而且可以定義新的方法    //為String類型添加一個startsWith()的方法    String.prototype.startsWith=function(text){      return this.indexOf(text) == 0;    };    var msg="Hello";    alert(msg.startsWith("H"));    //我們并不建議這樣做。    alert("原型對象的問題");    //6、原型對象的問題 實例    function Ques() {    }    Ques.prototype={      constructor:Ques,      name:"amber",      age:23,      job:"IT",      friends:["張三","李四"],//引用類型      sayName:function(){        alert(this.name)      }    };    var q1=new Ques();    var q2=new Ques();    q1.friends.push("王五");    alert(q1.friends);//    alert(q2.friends);//    alert(q1.friends===q2.friends);  //相信大家已經(jīng)看到了問題,當(dāng)我創(chuàng)建了兩個實例q1、q2,當(dāng)我為q1的“朋友”添加了“王五”之后,q2的”朋友“也有了三個張三、李四、王五  //那是因為數(shù)組存在于Ques.prototype上,而非q1上。所以出現(xiàn)了如上結(jié)果。  //而正是這個問題,我們很少看到有人單獨使用原型模式的原因所在。  </script>

本文就先到這里了,后續(xù)我們再繼續(xù)討論javascript面向?qū)ο蟪绦蛟O(shè)計,希望大家能夠喜歡。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
久久久久久美女| 欧美午夜美女看片| 黑人巨大精品欧美| 99精品黄色片免费大全| 福利视频一区| 懂色av粉嫩av蜜臀av一区二区三区| 国产欧美在线观看视频| 素人fc2av清纯18岁| 亚洲国产精品一区二区久久恐怖片| 另类尿喷潮videofree| 在线看黄网站| 成人网18入口| 最新日韩免费视频| 国内精品久久久久久久久久| 国产精品国产三级国产aⅴ9色| 久久99国产精品二区高清软件| 精品在线免费观看| 91caoporm在线视频| 狠狠擦狠狠操| 亚洲国产日韩精品在线| 亚洲国产aⅴ精品一区二区三区| 久久99精品久久久久子伦| 亚洲九九精品| 美女在线视频一区| 亚洲精品国产成人av在线| 国产深夜男女无套内射| 91麻豆国产自产在线观看| www.天堂在线观看| 亚洲欧美另类视频| 在线日本中文字幕| 色诱亚洲精品久久久久久| www视频在线播放| youjizz亚洲女人| 中文字幕一区二区在线观看视频| 免费污网站在线观看| 欧美人妻一区二区| 97久久久久久久| 亚洲综合自拍网| 亚洲第一福利在线观看| 香蕉视频在线观看免费| 亚洲影院久久精品| 国产精品对白刺激| 免费亚洲视频| 精品久久久久久久久久久久久| 精品久久久久中文字幕小说| 欧美成人三级视频网站| 亚洲欧美aⅴ...| 久久夜色精品亚洲噜噜国产mv| 中文在线资源观看视频网站免费不卡| 女生裸体免费视频| 成人久久综合| 精品久久久久久久久久久久久久久久久| 日本一区二区综合亚洲| 免费在线观看视频a| 日本美女视频一区| 大肉大捧一进一出好爽动态图| 老司机精品视频网| 亚洲AV午夜精品| 在线观看av免费观看| 一区二区三区四区日本视频| 极品蜜桃臀肥臀-x88av| 亚洲欧洲精品在线观看| 国产女教师bbwbbwbbw| 久久99精品久久久久久动态图| 蜜桃视频在线观看免费视频| 色网址在线观看| 国语对白在线播放| 97av在线视频免费播放| 国产一二三区在线播放| 唐朝av高清盛宴| 日本欧美黄色| 日韩亚洲欧美中文高清在线| 成人国产视频在线观看| 成人手机视频在线| 国产美女久久久久久| 国产成人无码aa精品一区| 秋霞午夜av一区二区三区| 国产精品久久久久白浆| 韩国欧美国产1区| 成人网视频在线观看| 欧美日韩一区二区三区| 人妻精品久久久久中文| 97久久天天综合色天天综合色hd| 国产精品视频线看| av无码av天天av天天爽| 欧美精品video| 最新日韩在线视频| 任你躁在线精品免费| 精品国产一区二区三区久久久樱花| 成人激情电影一区二区| 色综合天天综合网中文字幕| 91社区在线观看| 三级全黄视频| 欧美影院天天5g天天爽| 国产成人精品一区二区免费看京| 麻豆免费网站| 成人免费淫片在线费观看| 精品一二三区| 97在线视频免费播放| 黄色在线视频网址| 伊人网在线视频| 18禁免费无码无遮挡不卡网站| 黑人40厘米全进去| 久久久亚洲人| 精品人妻av一区二区三区| 亚洲视频在线观看一区二区三区| 国产在线拍揄自揄视频不卡99| 国产精品午夜av在线| 久久高清精品| 另类小说色综合| 外国一级黄色片| 午夜精品久久久久久久星辰影院| 五月香视频在线观看| 国产一区二区高清| 亚洲精品欧美二区三区中文字幕| 久久伊人资源站| 国产一卡2卡3卡免费网站| 四虎成人在线播放| 欧美视频www| 欧美 日韩 精品| 久久久久久影院| 国产精品国产精品国产专区不片| 国产一区二区三区四区在线观看| 天天综合亚洲| 中文字幕日韩三级片| 欧美日韩成人一区二区| 亚洲国产精品久久一线不卡| 久久视频一区二区三区| av磁力番号网| 黄色免费看网站| 黄色三级中文字幕| 美国黄色a级片| 青春草在线视频免费观看| 日日躁夜夜躁白天躁晚上躁91| 亚洲国产精品久久卡一| 久久99这里只有精品| 台湾av在线二三区观看| 日本视频在线一区| 久久久一区二区三区四区| 国产超碰在线播放| 91手机在线观看| 午夜精品久久17c| 亚洲444eee在线观看| 日韩五码在线| 日本精品国产| 深夜日韩欧美| 成人免费在线播放| 97视频在线播放| 国产美女网站视频| 日韩制服诱惑| 天使と恶魔の榨精在线播放| 中文字幕2018| 亚洲网站在线播放| 18videosex性欧美麻豆| 68国产成人综合久久精品| 国产精品扒开腿做爽爽爽a片唱戏| 亚洲观看黄色网| 国产精品不卡一区二区三区| 免费看涩涩视频| 成人午夜免费在线视频| va亚洲va日韩不卡在线观看| 成人高清网站| 97热精品视频官网| av影片免费在线观看| 日本深夜福利视频| 国产欧美中文字幕| 欧美精品黑人性xxxx| 日韩欧美中字| 亚洲尤物影院| 亚洲精品无人区| 91色porny在线视频| 亚洲AV无码精品自拍| 吉吉日韩欧美| 国产乱淫av片免费| 日本日本19xxxⅹhd乱影响| 国产精品青草久久久久福利99| 成人免费高清在线播放| av先锋下载| 日韩av综合网| 欧美精品一区二区三区蜜桃| 92久久精品| 国内高清免费在线视频| 亚洲精品日产| 又色又爽又黄视频| 成年人午夜视频在线观看| 久久久久九九精品影院| 天天摸天天干天天操| 成人高清av| 精品人妻人人做人人爽夜夜爽| 一区二区理论电影在线观看| 国产一级片免费| 在线观看日本网站| www在线看| 中文字幕一区二区在线视频| 三上悠亚久久精品| 中文字幕一区二区三区不卡| 国产一二三区在线| 欧美精品久久99久久在免费线| 国产精品美女一区二区在线观看| 国产探花在线精品一区二区| 成人免费精品动漫网站| 亚洲色成人www永久在线观看| 91精品在线国产| 91精品久久久久久久久不口人| 亚洲久久在线| 伊人久久综合网另类网站| 91性感美女视频| 欧美综合影院| 国产成人av免费看| 国产欧美一区二区三区四区| 国产精品欧美日韩一区二区| 久久精品一二三区| 亚洲欧洲日夜超级视频| 69久久夜色精品国产69乱青草| 在线中文字幕不卡| 在线观看成人影院| 九色综合狠狠综合久久| 亚洲精品在线电影| 日韩免费一二三区| 岛国毛片在线播放| 国产一区二区在线看| 国产 欧美 精品| 色欲一区二区三区精品a片| 国产精品视频第一区| 美女视频免费一区| 中文字幕精品一区| 精品国产美女福利到在线不卡| 污视频免费在线看| 国产精品91一区二区三区| 欧美成人免费在线视频| 久久一区二区三区超碰国产精品| www.久草| 理论片在线观看理伦片| 国产精品免费大片| 美女国内精品自产拍在线播放| 精品人人视频| 免费在线观看一区二区三区| 久久免费看视频| 欧美一级大片视频| 精品日韩成人av| 精品国内自产拍在线观看视频| 国语对白永久免费| 亚洲精品一区二区毛豆| 国产成人免费在线| 国产精品久久久久久久小唯西川| 免费成年人高清视频| 色老板亚洲精品一区| 久久免费小视频| 国产精品入口日韩视频大尺度| 日韩欧美99| 超碰在线中文| 91导航在线观看| 国产激情视频在线观看| 不卡区在线中文字幕| 中文字字幕在线观看| 天天综合天天做天天综合| 蜜桃视频无码区在线观看| 伊人精品视频在线观看| 国产精品久久国产三级国电话系列| 亚洲福利视频专区| 卡通动漫亚洲综合| 污污视频免费看| 在线成人h网| 免费a级片网站| 久久婷婷人人澡人人喊人人爽| 波多野结衣一本一道| 加勒比在线一区二区三区观看| 中文字幕伦理免费在线视频| 久久99精品国产99久久6尤物| 亚洲成人动漫一区| 尹人成人综合网| 成人做爰视频www网站小优视频| 啪啪一区二区三区| 国产欧美亚洲精品a| 91夜夜蜜桃臀一区二区三区| 亚洲中文字幕在线一区| 日韩午夜电影av| 日韩中文欧美| 一区二区三区在线观看免费视频| 午夜激情久久久| 性囗交免费视频观看| 91丨九色丨蝌蚪丨老版| av中文字幕电影在线看| 国产精久久久久| 色婷婷在线观看视频| 国产手机视频在线| 强制高潮抽搐sm调教高h| 在线精品国精品国产尤物884a| xvideos亚洲人网站| 99亚洲男女激情在线观看| 夜夜操夜夜操| 久久无码人妻一区二区三区| 成人av在线播放网站| 日本不卡网站| 亚洲精品一区二区毛豆| 久久嫩草精品久久久精品| 丰满人妻一区二区三区免费| 99热一区二区| 先锋影音男人| 亚洲人成影视在线观看| 亚洲国产精品久久久久久女王| 精品国产黄a∨片高清在线| 亚洲免费观看高清在线观看| 午夜免费在线观看精品视频| 亚洲人一区二区| 精品国产福利在线| 欧美激情aⅴ一区二区三区| 97se亚洲国产综合自在线观| 免费在线观看视频一区| 国产精品一区二区资源| 手机在线免费毛片| 国产淫片免费看| 欧美日韩三区四区| 老妇女50岁三级| 欧美激情欧美激情| 精品调教chinesegay| 国产一区二区三区在线观看免费| 欧美贵妇videos办公室| 成人免费的视频| 99在线视频播放| 美女高潮久久久| 欧美黑人ⅹxxx另类猛交| 亚洲大尺度视频| 亚洲一区美女视频在线观看免费| 成人精品在线视频| 在线中文字幕日韩| 亚洲精品99999| 日韩一级免费视频|