<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                [TOC] # 創建對象的方式 ## 1.字面量創建對象的方式 直接使用字面量方式創建對象比較方便,以**鍵值對**的格式來定義數據 ``` var book1 = { name:"JavaScript權威指南", price:100, author:"tim", showInfo:function () { console.log(this.name,this.price,this.author); } } console.log(book1); ``` ## 2.通過內置構造函數方式 內置構造函數方式創建對象----------------系統自帶的方式 ** new Object()** ``` var book2 = new Object(); book2.name="JS"; book2.price=10; book2.author="作者"; book2.showInfo=function () { console.log(this.name,this.price,this.author); } book2.showInfo(); ``` ***** 前面兩個方式是比較簡單,容易,但是代碼冗余 ## 3.工廠模式 把**內置構造**函數的方式**封裝成函數** ```javascript function createBook(name, price, author) { var book = new Object(); book.name=name; book.price=price; book.author=author; book.showInfo=function () { console.log(this.name,this.price,this.author); } return book; } var book3 = createBook("bookName1",10,"author1"); var book4 = createBook("bookName2",10,"author2"); console.log(book3); ``` ### 3.1 工廠模式的缺陷 工廠模式**沒有辦法找到父類** ```javascript function createPerson(name,age,sex) { var per = new Object(); per.name = name; per.age = age; per.sex = sex; return per; } var per1 = createPerson("ls",18,1); console.log(per1); function createDog(name,age,sex) { var dog= new Object(); dog.name = name; dog.age = age; dog.sex = sex; return dog; } var dog1 = createDog("wc",3,0); console.log(dog1); // instanceof 判斷對象的父親是否為這個函數,是則返回值是true,不是返回值則是false console.log(per1 instanceof createPerson); /*false 父親找不到*/ console.log(dog1 instanceof createDog); /*false 父親找不到*/ /*工廠模式的bug*/ ``` #### 3.1.1判斷對象是誰創建的(對象的父類是誰)-------instanceof 如果一個對象是函數創建的返回值是**true**,不是則返回的是**false** ## 4. 自定義構造函數的方式 **注意** 1)構造函數名的**首字母要大寫** 2)構造函數體里**沒有return**,會自動返回 3)需要使用**關鍵字new 和構造函數**一起創建對象 4)在函數中,不需要手動創建對象進行數據封裝,會自動創建并封裝數據 ``` function CreatePerson(name, age, sex) { this.name=name; this.age=age; this.sex=sex; } //實例化對象 var p = new createPerson("Neld", 10, 1); var p2 = new createPerson("Song", 12, 0); console.log(p); console.log(p2); ``` ***** #### 4.1 自定義構造函數到底是如何創建并封裝對象呢? 1. 在函數內部默認會創建一個空對象 var obj = new Object(); 2. 默認把創建好的對象賦值給this this = obj; 3. 默認設置this的原型對象為當前構造函數的原型對象 4. 通過this添加屬性和方法 5. 默認會把內部創建的對象返回 return this; ### 3.構造函數對象的默認返回值修改問題 默認情況下,構造函數內部會返回創建好的對象(this) 1. 如果返回**值類型**的數據,仍然返回創建好的對象(this),不做任何修改 2. 如果返回**引用類型**的數據,則返回指定的數據,不再返回this。 ``` function Person(name,age) { this.name = name; this.age = age; // return 9999;/*不起作用*/ return [];/*起作用*/ } var p1 = new Person("ls",13); console.log(p1); ``` <br> ## 5.Object.create() ***** 創建對象,并設置原型對象 (創建傳遞進來的對象,并設置該對象的原型對象為當前的參數---) ***** ``` var?temp?\={ name:"wc", age?:3, } var?obj??\=Object.create(temp);//把對象的參數設置為該對象的參數 console.log(obj); ``` 在原型上的參數 ![](https://img.kancloud.cn/2e/6a/2e6a63126dc964d9d9392e2ae5cec6d7_262x132.png) <br> **創建一個沒有原型的對象** *** ``` ar?o??=Object.create(null); //?可以添加屬性,但是沒有原型 o.name?="wc"; o.age?=3; o.sex=1; console.log(o); ``` ***** ![](https://img.kancloud.cn/a9/bd/a9bd9bd6f807044a3f5a4d10e473bfaa_408x111.png) ## 6.Object.assign() 將多個對象合并到一個對象中并返回 ~~~ var obj = {name:"Neld", age:10}; console.log(Object.assign(obj, {info: "xxx"}, {name: "zs"})); ~~~ > **如果多個對象想存在相同的屬性,后面會將前面屬性值覆蓋。**
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看