国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript constructor和instanceof,JSOO中的一對歡喜冤家

2024-05-06 14:15:19
字體:
來源:轉載
供稿:網友
至少每個嘗試JavaScriptOO的程序員都花費很多精力用在面向對象機制的模擬上而非業務本身.
這對Java,C++甚至Php的開發者來講都是難以想象的.
更糟糕的是模擬OO對于JavaScript高級程序員都有著邪惡的吸引.
因為干這個事兒超然于業務之上,有種創造新編程語言一般的快感,可以令IQ盡情揮灑.
正如前些年大家都想把自個網站的common.js寫成個框架一樣.直到YUI,JQuery等等的強勢推出才稍有平息.
然而雖然各個框架都有對JavaScriptOO模擬,但還未到有誰誰誰可以一桶糨糊的時候吧.
或許江湖就不需要的霸主出現,抑或大家只要等到JS2.0+就好了.
如果說可以new就是面向對象,那顯然JavaScript在這方面是非常不錯的.
代碼如下:
function Person(name){
this.name = name;
}
var lenel = new person("lenel");
alert(lenel.constructor === Person);
alert(lenel instanceof Person === true);
alert(lenel instanceof Object === true);

到此為止,一切都很和諧.
對象的constructor正如字面上的意義指向構造它的Person.
對象是構造它的Person的一個實例(instance).
所有對象都是Object的實例,像極了Java.
JavaScript提供原型(prototype)的方式來實現方法拓展和繼承
代碼如下:
Person.prototype.getName = function(){
return this.name
};

這樣定義了之后所有對象都具有了getName的方法.
當然也可以將寫在對象構造時
代碼如下:
function Person(name){
this.name = name;
this.getName = function(){
return this.name;
};
}

但是這種做法不僅是帶來額外性能損耗這點瑕疵,也不僅是帶來了可以訪問私有變量的特權.
它與使用prototype的寫法還會其他有不同之處,不過這不是本文的重點.
接下來,我們想到繼承,很常見的寫法是這樣的.
代碼如下:
function Stuff(name,id){
this.name = name;
this.id = id;
}
Stuff.prototype = new Person();
var piupiu = new Stuff("piupiu","007");
alert(piupiu.getName());

非常好,繼承了getName方法;
考察下instanceof
代碼如下:
alert(piupiu instanceof Stuff === true);
alert(piupiu instanceof Person === true);

非常好,說明了Stuff和Person是有關系的.piupiu是它倆的實例,非常Java.
接下來再考察下constructor
代碼如下:
alert(piupiu.constructor === Stuff);//false
test(piupiu.constructor === Person);//true

問題出現了明明new的Stuff為啥constructor卻是Person,
在這兒將道理也是強詞奪理,我們只好記住結論
結論:對象的constructor屬性并非指向其構造器,而是指向其構造器的prototype屬性的constructor屬性
文字功底太差,自己讀過都覺得沒說清楚
放在這里:
對象piupiu的constructor屬性指向的是其構造器Stuff的prototype屬性的constructor屬性
因為Stuff.prototype = new Person();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 平山县| 房山区| 库尔勒市| 图片| 射洪县| 淳安县| 炉霍县| 大埔县| 海原县| 隆子县| 榆中县| 洛隆县| 绿春县| 葫芦岛市| 岱山县| 二手房| 平远县| 西乡县| 高唐县| 铜川市| 湾仔区| 岳普湖县| 上栗县| 武乡县| 新沂市| 溧水县| 云南省| 正宁县| 安义县| 收藏| 娄底市| 鄢陵县| 东乡族自治县| 邵阳县| 镇雄县| 怀仁县| 大姚县| 安陆市| 德州市| 青龙| 泰和县|