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

首頁 > 語言 > JavaScript > 正文

擴展JavaScript功能的正確方法(譯文)

2024-05-06 14:22:09
字體:
來源:轉載
供稿:網友

早上看到《JavaScript 每周導讀》【第三期】一文,里面發現一篇文章(Extending JavaScript – The Right Way),覺得還不錯,翻譯過來跟大家共享,本文并不是逐字逐句進行翻譯,盡量說得通俗易懂。

原文地址:Extending JavaScript – The Right Way

以下是譯文

  JavaScript已經內置了很多強大的方法,但有時你需要的某個功能在內置的方法中沒有,我們怎么來優雅地擴展JavaScript功能呢。
  例如我們想增加一個capitalize()方法來實現首字母大寫,通常我們這樣寫:
代碼如下:
if(!String.prototype.capitalize)
{
String.prototype.capitalize = function()
{
return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase();
}
}

  上面的代碼可以正常使用,但如果在某個地方有下面的代碼:
代碼如下:
var strings = "yay";
for(i in strings) console.log(i + ":" + strings[i]);

  我們得到的結果是這樣的:
0: y
1: a
2: y
capitalize: function () { return this.slice(0, 1).toUpperCase() + this.slice(1).toLowerCase(); }
  這顯然不是我們想要的結果,輸出了我們增加的方法的原因是我們增加的方法的enumerable屬性默認為true。
  我們可以通過簡單地把枚舉屬性(enumerable)設置為false避免這個問題,使用defineProperty方法進行功能的擴展:
代碼如下:
if(!String.prototype.capitalize)
{
Object.defineProperty(String.prototype, 'capitalize',
{
value: function()
{
return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase();
},
enumerable: false
});
}

  現在我們再運行這段代碼:
代碼如下:
var strings = "yay";
for(i in strings) console.log(i + ":" + strings[i]);

  我們得到的結果是:
0: y
1: a
2: y
  要注意的是,用循環沒有輸出的并不代表不存在,我們可以通過下面的代碼查看到定義:
代碼如下:
var strings = "yay";
console.log(strings.capitalize)

  會輸出:
代碼如下:
function () { return this.slice(0, 1).toUpperCase() + this.slice(1).toLowerCase(); }

  用這種方式擴展JavaScript功能比較靈活,我們可以用這種方式來定義我們自己的對象,并設置一些默認值。
  以下是另外幾個擴展方法,你可以在自己的項目中使用:
  String.pxToInt()
  把"200px"這樣的字符串轉換為數字 200 :
代碼如下:
if(!String.prototype.pxToInt)
{
Object.defineProperty(String.prototype, 'pxToInt',
{
value: function()
{
return parseInt(this.split('px')[0]);
},
enumerable: false
});
}

  String.isHex()
  判斷一個字符串是否是16進制表示的,如"#CCC" 或 "#CACACA"
代碼如下:
if(!String.prototype.isHex)
{
Object.defineProperty(String.prototype, 'isHex',

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 浦城县| 西畴县| 中卫市| 香港| 女性| 正镶白旗| 兴仁县| 资阳市| 滦平县| 枝江市| 永昌县| 镇沅| 吉木萨尔县| 边坝县| 新宁县| 东方市| 吉水县| 高阳县| 衢州市| 彰化市| 沁阳市| 平凉市| 温州市| 班戈县| 金沙县| 青浦区| 昌都县| 息烽县| 汪清县| 江山市| 芮城县| 巴林左旗| 湘潭县| 安义县| 锡林郭勒盟| 永川市| 乌什县| 东山县| 休宁县| 山东省| 湘潭市|