javascript的對象(Object)

對象

定義

  • 在JavaScript中是沒有類的概念的,只有對象。無論是字符串,數值,數組還是函數,其本質都是對象。此外,JavaScript是允許自定義對象。什麼是對象呢?簡而言之,對象是帶有屬性和方法的特殊數據類型

1、基於已有對象擴充其屬性和方法

  • 簡單的創建一個對象,然後動態地爲其增加屬性和方法。
var object=new Object();
object.name="zhangsan";
object.sayName=function()
{
    this.name=name;
 }
object.sayName("lisi");      

2、工廠方法

  • 工廠方式的優點在於你不需要每次擴充方法和屬性,一次建成後就可以產生多個對象,無需關注創建細節,甚至不需要關注具體類的類名。
function factory()
{
    var object = new Object();
    object.username = "zhangsan";
    object.password = "123";

    object.get = function()
    {
        return (this.username+","+this.password);
    }
    return object;
}
var object1 = factory();     
object1.get();
var object2 = factory();
  • 好的對象創建方式應該滿足方法可以被多個對象共享,而屬性私有,使代碼更加簡略。同時,也可以將上述的程序改寫爲帶參數的工廠創建方式。改進後的代碼如下:
function get(){
    return (this.username+","+this.password);
}

function factory(username,password){
    var object = new Object();
    object.username = username;
    object.password = password;

    object.get = get;
    return object;
}

var object1 = factory("zhangsan","123");
object1.get();
var object2 = factory("lisi","456");

3、構造函數方式

  • 使用構造函數方式時,JavaScript引擎會在第一行代碼執行前爲我們生成一個對象,同時含有一個隱藏的return語句,將生成的對象返回。因此,在函數體內,無需顯性地聲明。
function Person(){
    //在執行第一行代碼前,js自動生成一個對象
    this.username = "zhangsan";
    this.password = "123";

    this.get = function(){
        return (this.username+","+this.password);
    }
    //隱藏的return語句,將生成的對象返回
}

var person = new Person();
person.get();

同理,也可以將其改爲可傳遞參數的構造函數。

4、使用原型(prototype)方式

  • 單純使用原型方式定義對象無法在構造函數中爲屬性賦初值,只能在對象生成後再去改變屬性值。
function Person()
{
}

Person.prototype.username = "zhangsan";
Person.prototype.password = "123";
person.prototype.get = function(){
    return (this.username+","+this.password);
}

var person = new Person();
person.username = "lisi";
person.password = "456";
person.get();
  • 如果使用原型方式對象,那麼生成的所有對象會共享原型中的屬性,這樣一個對象改變了該屬性也會反映到其他對象當中。可以使用原型+構造函數方式來解決這個問題,使對象之間的屬性互不干擾,各個對象間共享同一個方法。這也是推薦使用的方法。
function Person()
{
    this.username = new Array();
    this.password = "";
}

Person.prototype.get = function()
{
    return (this.username+","+this.password);
}

var p1 = new Person();
var p2 = new Person();

p1.username.push("zhangsan");
p1.password = "123";

p2.username.push("lisi");
p2.password = "456";

p1.get();
p2.get();

5、動態原型方式

在構造函數中,通過標誌量讓所有對象共享一個方法,而每個對象都擁有自己的屬性。

function Person()
{
    this.username = "zhangsan";
    this.password = "123";

    if(typeof Person.flag == "undefined")
    {
        Person.prototype.get = function()
        {
            return (this.username+","+this.password);
         }
        Person.flag = true;
    }
}
var p1 = new Person();
var p2 = new Person();
p1.get();
p2.get();

以上轉載自https://blog.csdn.net/qq_41690306/article/details/79253501

    *定義
                    * 字面量
                    * 構造函數
                * 格式: {屬性名:屬性值,屬性名:屬性值}
                * 操作(屬性名:[],點語法)
                    * 增 添加一個屬性
                    * 刪 刪除一個屬性
                    * 改 修改一個現有屬性
                    * 查 讀取屬性名對應的屬性值
                        * 讀取不存在的屬性得到:undefined
                    * 遍歷
         */
// 字面量
            // 
            var person = {
                name:'laoxie',
                age:18,
                gender:'男',
                hobby:['寫代碼','休閒會所','羽毛球']
            }

            // 添加屬性
            // person['nickname'] = '小謝';
            person.nickname = '小謝';

            // 刪除屬性
            // delete
            // delete person['hobby'];
            delete person.hobby;


            // 修改
            person.age = 19;

            // 讀取屬性值
            console.log(person.name)


            console.log(person);

            // 讀取所有屬性
            // 遍歷對象全部屬性:for...in
            for(var key in person){
                // 遍歷過程分別把屬性名賦值給key
                // 1.var key=name;
                // 2.var key=age
                // 3.var key=gender
                // 4.var key=nickname
                // console.log(key);

                // 獲取key對應的屬性值
                console.log(key,person[key]);//person.key
            }

下面轉載自老謝

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章