使用內建的 Object() 建構函數,我們可以動態建立通用的空物件。事實上,如果你還記得第一章的開頭,這正是我們透過創建 cody 物件所做的事情。讓我們重新建立 cody 物件。
#範例:sample69.html
<!DOCTYPE html><html lang="en"><body><script> var cody = new Object(); // Create an empty object with no properties. for (key in cody) { // Confirm that cody is an empty generic object. if (cody.hasOwnProperty(key)) { console.log(key); // Should not see any logs, because cody itself has no properties. } } </script></body></html>
在這裡,我們所做的就是使用 Object()
建構子來建立一個名為 cody 的通用物件。您可以將 Object()
建構子視為千篇一律的工具,用於建立沒有預先定義屬性或方法的空物件(當然,從原型鏈繼承的物件除外)。
如果不是很明顯,Object()
建構子本身就是一個物件。也就是說,建構函數是基於從 Function
建構函數所建立的物件。這可能會令人困惑。請記住,與 Array
建構子一樣,Object
建構子只是吐出空白物件。是的,您可以建立您喜歡的所有空物件。但是,創建像 cody 這樣的空物件與使用預定義屬性建立自己的建構函數有很大不同。確保您了解 cody 只是一個基於 Object()
建構函數的空物件。要真正利用JavaScript 的力量,您不僅需要學習如何從Object()
建立空物件容器,還需要學習如何建立自己的物件「類別」(Person()
) ,例如Object()
建構子本身。
Object()
參數Object()
建構子採用一個可選參數。此參數是您想要建立的值。如果您未提供任何參數,則將假定 null
或 undefined
值。
範例:sample70.html
<!DOCTYPE html><html lang="en"><body><script> // Create an empty object with no properties. var cody1 = new Object(); var cody2 = new Object(undefined); var cody3 = new Object(null); console.log(typeof cody1, typeof cody2, typeof cody3); // Logs 'object object object'. </script></body></html>
如果將 null
或 undefined
以外的值傳遞給 Object
建構函數,則傳遞的值將會建立為物件。因此理論上,我們可以使用 Object()
建構子來建立任何其他具有建構函式的本機物件。在下一個範例中,我就是這麼做的。
範例:sample71.html
<!DOCTYPE html><html lang="en"><body><script> /* Use the Object() constructor to create string, number, array, function, Boolean, and regex objects. */ // The following logs confirm object creation. console.log(new Object('foo')); console.log(new Object(1)); console.log(new Object([])); console.log(new Object(function () { })); console.log(new Object(true)); console.log(new Object(/\bt[a-z]+\b/)); /* Creating string, number, array, function, Boolean, and regex object instances via the Object() constructor is really never done. I am just demonstrating that it can be done. */ </script></body></html>
Object()
屬性與方法Object()
物件具有以下屬性(不包括繼承的屬性和方法):
屬性(Object.prototype;
):
原型
Object()
實例屬性與方法Object()
物件實例具有下列屬性和方法(不包含繼承的屬性和方法):
實例屬性 (var myObject = {};
myObject.constructor;
):
建構子
實例方法 (var myObject = {};
myObject.toString();
):
hasOwnProperty()
isPrototypeOf()
propertyIsEnumerable()
#toLocaleString()
toString()
#valueOf()
原型鏈以Object.prototype
結尾,因此Object()
的所有屬性和方法都會被所有JavaScript物件繼承。
Object()
物件建立「物件文字」需要使用大括號實例化有或沒有屬性的物件(var cody = {};
)。還記得在第一章開始時我們創建了一次性 cody 對象,然後使用點表示法賦予 cody 對象屬性嗎?讓我們再做一次。
範例:sample72.html
<!DOCTYPE html><html lang="en"><body><script> var cody = new Object(); cody.living = true; cody.age = 33; cody.gender = 'male'; cody.getGender = function () { return cody.gender; }; console.log(cody); // Logs cody object and properties. </script></body></html>
請注意,程式碼中建立 cody
物件及其屬性需要五個語句。使用物件文字表示法,我們可以在一條語句中表達相同的 cody
物件。
範例:sample73.html
<!DOCTYPE html><html lang="en"><body><script> var cody = { living: true, age: 23, gender: 'male', getGender: function () { return cody.gender; } }; // Notice the last property has no comma after it. console.log(cody); // Logs the cody object and its properties. </script> </body>
使用文字表示法使我們能夠使用更少的程式碼建立物件(包括定義的屬性)並直觀地封裝相關資料。請注意在單一語句中使用 :
和 ,
運算子。由於其簡潔性和可讀性,這實際上是在 JavaScript 中建立物件的首選語法。
您應該知道屬性名稱也可以指定為字串:
範例:sample74.html
<!DOCTYPE html><html lang="en"><body><script> var cody = { 'living': true, 'age': 23, 'gender': 'male', 'getGender': function () { return cody.gender; } }; console.log(cody); // Logs the cody object and its properties. </script> </body>
沒有必要將屬性指定為字串,除非屬性名稱:
class
)。 小心!物件的最後一個屬性不應有尾隨逗號。這會在某些 JavaScript 環境中導致錯誤。
Object.prototype
JavaScript中的Object()
建構子比較特殊,因為它的prototype
屬性是原型鏈中的最後一站。
在以下示例中,我使用 foo
属性扩充 Object.prototype
,然后创建一个字符串并尝试访问 foo
属性,就好像它是字符串实例的属性一样。由于 myString
实例没有 foo
属性,因此原型链启动并在 String.prototype
中查找值。它不在那里,所以下一个要查找的位置是 Object.prototype
,这是 JavaScript 查找对象值的最终位置。找到了 foo
值,因为我添加了它,因此它返回 foo
的值。
示例:sample75.html
<!DOCTYPE html><html lang="en"><body><script> Object.prototype.foo = 'foo'; var myString = 'bar'; // Logs 'foo', being found at Object.prototype.foo via the prototype chain. console.log(myString.foo); </script> </body>
小心!添加到 Object.prototype
的任何内容都将显示在 for in
循环和原型链中。因此,据说禁止更改 Object.prototype
。
以上是重新表達的標題為:The Concept of Object()的詳細內容。更多資訊請關注PHP中文網其他相關文章!