2012-01-13 48 views
1

我可以很容易地創建和反對很多不同的東西。例如像這樣:JavaScript對象

var myObject = { 
    myFunction: function() { 
     return ""; 
    } 
}; 

所以,如果我提醒這個對象我得到的東西這樣的:

[object Object] 

現在我如果我提醒NaN對象我得到這個:

NaN 

我仍然可以調用函數從中:

alert(NaN.hasOwnProperty().toString()); 

所以我的問題是如何創建一個對象,如NaN對象?

  1. 如果我提醒它,它應該返回類似myObject
  2. 我應該能夠像myObject.myFunction();
+1

恩......你在問什麼? – tekknolagi 2012-01-13 10:39:06

回答

2

只有使用構造函數創建的對象才能使用console.log()顯示其類名,如@ Esalijia的答案中所示。

即使如此,它將是類名稱這是顯示,而不是你碰巧指派對象的任何變量的名稱。

toString()方法添加到對象將改變alert()函數的輸出,因爲它總是查找該方法的存在並在存在的情況下使用該方法。

所以,寫作:

var myObj = { 
    toString: function() { return "boo"; } 
} 
alert(myObj) 

會顯示警告框boo,而不是[Object object]

2
alert(NaN.hasOwnProperty().toString()); // says false. 
alert(typeof NaN); //says it is a number 

在其上創建並調用函數所以,我不認爲NaN的是一個對象,它的數據類型是一個數字。

For more info:NaN表示非數字。即使數據類型是數字,它也不是數字。當任何數學計算不能返回數字時,它將返回NaN。 isNaN()函數確定某個值是否爲非法數字(Not-a-Number)。如果值爲NaN,則該函數返回true,否則返回false。

例如,

var num=35; 
var num2=num/'asg'; 
console.log(num2); //returns NaN 
+1

'NaN'是一個不是數字的數字 – 2012-01-13 10:43:01

+0

當你做不可能的JavaScript操作時'NaN'將被返回。對我來說,NaN是一個對象,因爲你可以循環它。 – noob 2012-01-13 10:52:16

+0

@AndrewD,micha。你更正確!這是例外。 NaN在不可能的數學運算時返回。 – 2012-01-13 11:00:46

3
function MyObject(){} 

    MyObject.prototype = { 

     toString: function(){ 
      return "myObject"; 
     }, 

     myFunction: function(){ 

     } 

    }; 

var myObject = new MyObject(); 

alert(myObject); 
//myObject 
+0

它是NaN對象嗎? – 2012-01-13 10:44:37

+0

不,但它填補了這些標準:'如果我登錄它應該返回類似於myObject 我應該能夠創建和調用函數就像myObject.myFunction();' – Esailija 2012-01-13 10:46:05

+0

對不起,但我不希望它返回' > MyObject'我希望它像'NaN'對象那樣返回'MyObject'。我編輯了我的問題,使其更清楚。 – noob 2012-01-13 10:49:42

1

NaN是一個數字原語,而不是一個對象。與所有基元類似,當您使用.運算符訪問創建者類的prototype上存在的屬性或方法時,它將轉換爲對象。

顯示可用於原語的屬性,或者將其轉換爲一個對象,或使用console.dir()

console.dir(NaN); 
console.log(Object(NaN)); 

所有原始行爲這種方式,當你在以下任何呼叫console.log,他們表現出相同的行爲:

console.log("Hello"); 
console.log(1); 
console.log(true); 

然而,你可以對他們的訪問屬性,像普通的對象:

"Hello".length; 
1 .toString(); 
true.valueOf(); 
+0

+1不錯的答案,但我不能創建一個新的「本地」的東西,如#ffffff'屬性'#ffffff.rgb();'(不是字符串) – noob 2012-01-13 11:08:16

+0

@micha:真的,你的問題的整個前提是一個問題,因爲你認爲'NaN'是一個對象,這使得所有嘗試的人都難以回答。 – 2012-01-13 11:36:15

+0

現在我認爲每個JavaScript變量都是一個對象(不是真實的,而是對我來說) – noob 2012-01-13 11:59:17