2015-02-23 53 views
0

我要實現的JavaScript字符串內置功能,但我有length屬性它是實現JavaScript字符串長度屬性的正確方法嗎?

下面有點困惑是我實現

function MyString(str){ 

    this.str=str; 

    //properties 
    this.length=0; 

     if(typeof this.str[0]=='undefined') 
      this.length=0;   

     else 
      for (var i = 0; typeof this.str[i]!='undefined' ; i++) 
      this.length++; 

     //tostring method 
    this.toString=function(){ 
     if(typeof this.str == 'string') 
      console.log(this.str); 
     else 
      console.log("cannot be converted to String") ; 

    } 
} 

這是貫徹落實長度property.Because它看起來可怕的正確方法對我來說,或者如果我想計算長度只有當用戶調用'str.length'和仍然長度應該保留作爲財產,我該怎麼做

我做了一個替代就是這樣,但會是功能

this.length=function(this.str){ 
//length logic here 
} 

我如何能實現它在一個更好的辦法,但仍然長度似乎是一個財產

+4

的問題是 「爲什麼?」 [str.length](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/length)將返回字符串的長度 – mplungjan 2015-02-23 12:56:04

+0

這就是我的問題。 – Andy 2015-02-23 12:56:36

+0

你正在重塑車輪 – 2015-02-23 13:02:40

回答

1

我猜你感到困惑(我假設你正在試圖創建自己的字符串對象):

  1. 是定義屬性的更好方法嗎?

  2. 有沒有其他辦法?和

  3. 我將把邏輯計算函數內部長度和仍然使用它作爲一個屬性

如果你有一個像string.length一個屬性來建立你自己的,你想在初始化之前對它進行一些操作,然後你就做對了。

一個屬性只是在構造函數內部定義的,它的所有初始化都像你所做的一樣,除非你想使它成爲length()的函數。

如果你想換你邏輯函數內部長度,這實際上會成爲一個方法(而不是保持一個屬性了),我沒有任何替代方式來覆蓋

但是,如果你想的邏輯:這一個

 if(typeof this.str[0]=='undefined') 
      this.length=0;   

     else 
      for (var i = 0; typeof this.str[i]!='undefined' ; i++) 
      this.length++; 

被稱爲每當長度功能(你想什麼屬性)被調用,則必須爲它創建一個方法。

所以物業length在這種情況下不可能使用,除非你堅持你的方法

+0

感謝您的答覆..我想知道天氣編碼是按照標準或不是?這是好的編程風格還是更好的方法 – Ein2012 2015-02-23 13:35:24

+0

@rajashekarthirumala ..是的,如果沒有選擇給你,它是好的。但是如果你創建了一個方法,它將會是更好的風格..但是你會把它作爲一個屬性來放棄它 – 2015-02-23 13:48:05

1

的字符串的長度不在JavaScript計算。它是屬於每個字符串值的常量。可以使用.length property來查詢,它訪問相應字符串的內部存儲大小。

只是做

function MyString(str) { 
    this.str = str; 
    this.length = str.length; 
} 
MyString.prototype.toString = function() { 
    return this.str; 
}; 

如果你想跟隨the spec更加緊密,使用

Object.defineProperty(this, "length", {value: str.length}); 
相關問題