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

首頁 > 語言 > JavaScript > 正文

JavaScript prototype屬性深入介紹

2024-05-06 14:20:46
字體:
來源:轉載
供稿:網友
每個函數創建時默認帶有一個prototype屬性,其中包含一個constructor屬性,和一個指向Object對象的隱藏屬性__proto__。constructor屬性的值為該函數的對象。在一個函數前面加上new來調用,則會創建一個隱藏連接到該函數prototype成員的新對象(由__proto__屬性來鏈接),同時函數的this將會被綁定到那個新對象上。
函數總是返回一個值;如果沒有指定返回值,就返回undefined;如果當做構造函數來調用,且返回值不是對象,則返回this(該新對象);如果返回值是對象,則它作為構造函數是沒有意義的!
[javascript]
代碼如下:
function A(){
this.p = 'haha';
return {p:'heihei'};
}
var a = new A();
function A(){
this.p = 'haha';
return {p:'heihei'};
}
var a = new A();
alert(a.p);//顯示'heihei',與var a = A();的效果一樣

函數A內部直接調用一個函數B,B的this綁定到全局對象而不是其外部函數A,這是JS設計的一個錯誤。我們不得不用別的方式來解決這個問題,比如在A中用一個變量(通常是that)來保存A的this作用域的引用。
JS函數擁有一個length屬性,表示函數定義時指定的形參的個數。
函數的arguments屬性包含了調用函數時傳入的所有參數,而不管函數的聲明中是否定義了這些形參;arguments不是數組,只是一個“類似數組”的對象(在函數中運行arguments instanceof Array;返回false)。可以通過Array.prototype.slice.apply(arguments)將其轉化為JS數組。
給JavaScript函數的原型增加方法(method),則所有的(構造)函數都可以用了!例如,可以給JS函數的構造者 Function 的原型增加一個method方法,則包括Object、Number等構造函數在內的所有函數都繼承了該方法,這是很強大的:
[javascript]
代碼如下:
Function.prototype.method = function(name, func){
this.prototype[name] = func;
return this;
};
Function.prototype.method = function(name, func){
this.prototype[name] = func;
return this;
};

這樣,調用Object.method方法,就可以為所有的JS對象(包括Function對象)增加新的方法,調用Number.method方法,可以為所有的數值類型增加新的方法,下面一條就是這樣的一個例子。 注意Object、Number等類型的對象此時并沒有繼承method方法。如果想達到這樣的目的,可以運行類似下面的語句:
[javascript]
代碼如下:
Object.method('method',Object.method);
Object.method('method',Object.method);

我們可以通過修改數值類型的原型,來給數值類型增加新的方法,這里我們借用上一條中提到的method方法來給Number的原型增加一個negative方法:
[javascript]
代碼如下:
Number.method(negative,function(){
return 0–this;
})
Number.method(negative,function(){
return 0–this;
})
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 友谊县| 新郑市| 嘉禾县| 永兴县| 城市| 甘肃省| 临桂县| 梁山县| 龙江县| 建水县| 茂名市| 介休市| 桑日县| 九台市| 堆龙德庆县| 青浦区| 文昌市| 琼海市| 台山市| 大新县| 竹山县| 白玉县| 双桥区| 龙川县| 元朗区| 兴海县| 泌阳县| 漳平市| 吴桥县| 铜川市| 朝阳市| 富民县| 广灵县| 芦山县| 宁城县| 宜黄县| 姜堰市| 吉安市| 兰考县| 额济纳旗| 广平县|