日期:2014-05-16  浏览次数:20530 次

Javascript瀛︿範绗旇 What's the "new"?

鏈枃涓昏璁板綍鍦ㄥ涔燡avascript锛堜负浜嗗噺灏戞墦瀛楃殑宸ヤ綔閲忓拰璇荤殑椤哄彛锛屼互鍚庝細浣跨敤JS锛夌殑杩囩▼涓紝瀵逛簬鈥渧ar o = new Obj(1);鈥濊繖琛屼唬鐮佺殑鐞嗚В銆?/span>

鍦ㄥ涔犲拰浣跨敤JS涔嬪墠锛屾垜瀛︿範杩囦竴浜涚粡鍏哥殑缂栫▼璇█锛屽Java銆丳HP鍜孋锛屾垜鍙互鐔熺粌鐨勪娇鐢↗ava锛岃兘澶熼槄璇诲拰绠€鍗曞湴缂栧啓C鍜孋++鐨勪唬鐮併€?br>
浣嗘槸褰撴垜甯︾潃杩欎簺缁忛獙鏉ユ帴瑙S鐨勬椂鍊欙紝鎴戝彂鐜颁簨鎯呭畬鍏ㄥ彉鍖栦簡锛屾垜鍦ㄥ緢闀夸竴娈垫椂闂村唴鍙兘鐢↗S瀹炵幇椤甸潰鐨勫姛鑳斤紝浣嗘槸瀵逛簬绫讳互鍙婄被鐨勫疄渚嬪寲瀹屽叏鎽镐笉鍒板ご鑴戙€?br>
鎴戞兂杩欑閿欒浜х敓浜庝袱涓師鍥狅細
瀵逛簬JS鐨勫涔狅紝鎴戞槸杈瑰伐浣滆竟瀛︿範鐨勶紝杩欐牱瀛︾殑濂藉鏄笂鎵嬪揩锛岀己鐐逛篃鍚屾牱鏄捐憲锛氬熀纭€鐭ヨ瘑涓€濉岀硦娑傦紱
寰堝JS鐨勭煡璇嗘潵婧愪簬浜掕仈缃戯紝缃戜笂鏈夊緢澶氫汉鑷繁涔熸槸涓€鐭ュ崐瑙o紙褰撶劧涔熷寘鎷湰鏂囧拰鏈枃鐨勪綔鑰咃級锛屾垜鐪嬪畬涔嬪悗鍐嶅姞涓婅嚜宸辩殑鐞嗚В锛屼簬鏄垜璺濈鐪熺浉瓒婃潵瓒婅繙浜嗐€?br>瑷€褰掓浼狅紝瑕佺悊瑙ar o = new Obj(1);锛屾垜浠鍏堣鐭ラ亾杩欐潯璇彞鏄共鍢涚殑锛?br>
鏈夎繃闈㈠悜瀵硅薄瀛︿範缁忛獙鐨勪汉涓€瀹氫簡瑙o紝杩欐潯璇彞鏄被鐨勫疄渚嬪寲銆?br>
涓€銆佽鏈夌被鍜屽疄渚嬪寲鐨勭煡璇?/strong>

閭d箞锛屼粈涔堟槸绫伙紝浠€涔堝張鏄疄渚嬪寲锛?br>
缁村熀鐧剧缁欎簡涓€涓瘮杈冩娊璞$殑瀹氫箟锛氱被鐨勬洿涓ユ牸鐨勫畾涔夋槸鐢辨煇绉嶇壒瀹氱殑鍏冩暟鎹墍缁勬垚鐨勫唴鑱氱殑鍖呫€傚畠鎻忚堪浜嗕竴浜涘璞$殑琛屼负瑙勫垯锛岃€岃繖浜涘璞″氨琚О涓鸿绫荤殑瀹炰緥銆?br>
璇寸殑鍏蜂綋涓€浜涳紝绫诲氨鏄竴浜涙湁鐩稿悓涓綋鐨勭壒寰佹娊璞★紝鑰岄€嗙潃鎶借薄锛屼粠鑰屽缓绔嬬被鍒颁釜浣撶殑杩囩▼鍙仛瀹炰緥鍖栥€?br>
姣斿涓浗浜哄氨鍙互浣滀负涓€涓被锛屾瘡涓汉涓浗浜洪兘鏈変竴涓腑鏂囧悕瀛楋紝杩欏氨鏄被鐨勪竴涓睘鎬с€備腑鍥戒汉鐨勫悕瀛楁槸浠€涔堬紝鎴戜滑鏄涓嶅嚭鏉ョ殑锛屼絾浣滀负涓€涓腑鍥戒汉鐨勫疄渚嬶紝鎴戠殑鍚嶅瓧鏄€滃北璋封€濄€?br>
杩欐槸寰堟祬鏄剧殑鐭ヨ瘑锛屽挨鍏舵槸瀵逛簬璁$畻鏈虹煡璇嗘墡瀹炵殑浜恒€?br>
浜屻€丣S涓浣曞垱閫犵被

閭d箞鎴戜滑鏉ョ湅涓€娈礘S浠g爜锛孞S鏄浣曞缓绔嬩竴涓被銆?br>
var Obj = function(x) {
聽聽聽 this.x = x;
聽聽聽 console.log(this.x);
聽聽聽 //xxxxxxx
};

杩欐槸寰堟爣鍑嗙殑鍐欐硶锛堝寘鎷缉杩涗负4涓┖鏍艰€屼笉鏄竴涓猼ab锛屾瘡琛岀粨灏惧閮芥病鏈夌┖鏍硷級锛岀殑纭紝鍦↗S涓紝涓€涓狾bj鐨勭被锛屽氨璇炵敓浜嗐€?br>
瀵逛簬娌℃帴瑙﹁繃缂栫▼鐨勫皬鐧借繕濂藉姙锛屾垜灏辫繖涔堣蹇嗕簡锛屼絾鏄湁Java鎴栬€匔++涔﹀啓缁忓巻鐨勪汉涓€瀹氫細鐤帀鐨勶紝杩欐槸鍑芥暟鐨勫0鏄庢柟娉曪紝鏄殑锛屽湪JavaScript 2.0涔嬪墠锛孞S閲岄潰娌℃湁鈥滅被鈥濓紙姝よ瘽鏄疍avid Flanagan鍦ㄣ€奐avaScript鏉冨▉澹版槑銆嬩腑璇寸殑锛屾垜鐗规鍙戣〃鍏嶈矗澹版槑锛岀敱浜庝粬鍦ㄥソ鍑犱釜鐗堟湰閮戒繚鐣欎簡杩欏彞璇濓紝鎴戝亣瀹氳繖鍙ヨ瘽鏄湡鐨勶級銆?br>
JS鍙湁鈥滀吉绫烩€濓紝娌℃湁浠讳綍涓€涓狫S鐨勭粨鏋勬槸绫伙紙鎴戜滑鏈夊璞★紝鎴戜滑鏈夋暟缁勶紝鎴戜滑杩樻湁鍑芥暟锛屾垜浠氨鏄病鏈夌被锛夛紝浣嗘槸JS鍙互妯′豢绫伙紝鍗崇被鏈変粈涔堬紝鎴戜滑灏辨湁浠€涔堛€?br>
閭d箞锛岀被鏈変粈涔堬紵

绫绘湁灞炴€э紙public銆乸rotected銆乸rivate閮借锛夛紝绫昏繕鏈夋柟娉曪紙涓嶇闈欐€佺殑杩樻槸鍔ㄦ€佺殑锛夛紝涓€鑸儏鍐典笅锛岀被杩樻湁鏋勯€犲嚱鏁般€?br>
浠呬互Java涓轰緥锛屾垜浠啓涓€涓被鐪嬬湅鍚с€?br>
public class Obj {
聽聽聽 public int i = 0;//灞炴€?br>聽聽聽 private int x = 1;//灞炴€?br>
聽聽聽 public Obj(x) { //鏋勯€犲嚱鏁?br>聽聽聽聽聽聽聽 this.x = x;
聽聽聽 }

聽聽聽 public int getX() { //鏂规硶
聽聽聽聽聽聽聽 return this.x;
聽聽聽 }
}

閭d箞JavaScript閮藉彲浠ユā浠裤€?br>
棣栧厛璇碕avaScript鐨勬瀯閫犲嚱鏁帮紝灏辨槸Obj杩欎釜function锛堢敤鑻辨枃鏂逛究涓婁笅鏂囧鐓э級銆?br>
閭d箞灞炴€у拰鏂规硶鍙互鎬庝箞鍔烇紝鎴戜滑浼氬皾璇昈bj.xxx杩欎釜鏂瑰紡锛屼絾浜嬪疄璇佹槑锛屽綋var o = new Obj()锛宱鏄棤娉曡皟鐢▁xx鐨勩€?br>
甯︾潃闂锛堥棶棰樻槸鏂规硶鍜屽睘鎬ф寕杞界殑浣嶇疆锛夛紝鎴戜滑寮€濮嬪疄渚嬪寲鍚э紒

涓夈€佸疄渚嬪寲鎬诲叡鍒嗕笁姝ワ紙鍜屾妸澶ц薄瑁呭埌鍐扮閲岀殑姝ラ涓€鏍峰锛?/strong>

绗竴姝ワ細var o = {};
绗簩姝ワ細o.__proto__ = Obj.prtotype;//Obj.prototype锛熸垜浠苟娌℃湁澹版槑prototype锛屽锛岃繖鏄祻瑙堝櫒鑷姩鍔犲叆鐨勩€?br>绗笁姝ワ細Obj.call(o, 1, 2);

鎬荤粨涓猴細绗竴姝ワ紝鍒涘缓涓€涓┖瀵硅薄骞惰祴鍊肩粰o锛涚浜屾鏄畾涔夊師鍨嬮摼浣垮緱o鎸囧悜Obj鐨勫師鍨嬪璞★紱绗笁閮ㄤ负鐢ㄥ璞璋冪敤Obj鍑芥暟锛岃皟鐢ㄥ弬鏁颁负1鍜?銆?br>
绗竴姝ュソ鐞嗚В锛屾棦鐒舵槸瀹炰緥鍖栵紝灏辫瀹炰緥鍖栫被涓哄璞★紝鍒檕蹇呯劧鏄竴涓璞★紝鍏堣祴鍊兼垚瀵硅薄锛屽啀杩涜鎿嶄綔銆?br>绗簩姝ョ殑闅剧偣鍦ㄤ簬浠€涔堟槸鍘熷瀷閾撅紝涓轰粈涔堝師鍨嬮摼瑕乷鎸囧悜Obj鐨勫師鍨嬪璞★紝閭d箞Obj鐨勫師鍨嬪璞″張鏄粈涔堬紵
绗笁姝ョ浉瀵逛簬绗簩姝ュソ鐞嗚В锛屽敮涓€鐨勪竴鐐规槸call绌剁珶骞蹭簡浠€涔堬紵

3.1 鍘熷瀷閾?/strong>
鏍规嵁ECMAScript鐨勮В閲婏細姣忎釜鐢辨瀯閫犲櫒鍒涘缓鐨勫璞★紝閮芥湁涓€涓殣寮忓紩鐢?( 鍙仛瀵硅薄鐨勫師鍨?) 閾炬帴鍒版瀯閫犲櫒鐨勨€減rototype鈥濆睘鎬у€笺€傚啀鑰咃紝鍘熷瀷鍙兘鏈変竴涓潪绌?(non-null) 闅愬紡寮曠敤閾炬帴鍒板畠鑷繁鐨勫師鍨嬶紝浠ユ绫绘帹锛岃繖鍙仛鍘熷瀷閾俱€?br>o.__proto__鎸囧悜鐨勬槸o鍘熷瀷閾剧殑涓婄骇锛岃€屽叾涓婄骇鐨刜_proto__鐢辨寚鍚戜笂绾х殑涓婄骇锛屽綋浣跨敤瀵硅薄o鐨勪竴涓柟娉曟椂锛屽o.xx锛宩s鐨勮В鏋愬櫒浼氭部鐫€o鐨勫師鍨嬮摼涓€鐩村悜涓婂鎵撅紝鎵惧埌鏈€杩戠殑涓€涓獂x鏂规硶锛岀劧鍚庤皟鐢ㄣ€?br>閫氫織璁诧紝灏辨槸閫氳繃杩欎釜鏂瑰紡锛宱鍙互璋冪敤Obj鍘熷瀷涓婄殑鏂规硶銆?br>鍊煎緱寮鸿皟鐨勬槸锛宱.__proto__骞朵笉鍏锋湁閫氱敤鎬э紝鐩墠Chrome銆丗irefox鍜孲afari鏀寔杩欎竴灞炴€с€?br>
3.2 鍘熷瀷瀵硅薄
鍘熷瀷瀵硅薄涔熷彲浠ュ彨鍋氬師鍨嬨€侲CMAScript鐨勫畾涔夊緢绠€鍗曪細 涓哄叾浠栧璞℃彁渚涘叡浜睘鎬х殑瀵硅薄銆?br>灏盝S鐨勭被鏉ヨ锛屽師鍨嬪彲浠ョ悊瑙d负鎸傝浇鍙橀噺鍜屾柟娉曠殑瀹瑰櫒銆?br>璀锛屾垜浠笇鏈涘湪Obj绫讳腑娣诲姞getS鐨勬柟娉曪紝甯歌鍐欐硶鏄細
Obj.prototype.getS = function() {
聽聽聽 //xxxxxxxxxxx;
};
浣嗘槸涓轰簡鏂逛究闀挎椂闂翠娇鐢↗ava鍜孋++鐨勪汉鐞嗚В锛屾垜浠篃鍙互鍐欎负锛?br>Obj.prototype = {
聽聽聽 getS: function() {
聽聽聽聽聽聽聽 //xxxxxxxxxxxxxxxxxxx;
聽聽聽 }
}

3.3 o.__proto__ = Obj.prototype
鐞嗚В浜?.1鍜?.2锛屾垜浠氨鏄庣櫧浜唎.__proto__ = Obj.prototype鏄共鍢涚殑浜嗐€?br>绗簩姝ユ槸浣縊bj涓婄殑鏂规硶鍜屽彉閲忓彲浠ヤ负o鎵€鐢ㄣ€?br