<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # object.assign基本用法 # Object.assign()方法 ## 對象的擴展 1.ES6中,對象的屬性和方法可簡寫:對象的屬性值可不寫,前提是屬性名已經聲明; ``` <pre class="calibre13">``` <span class="token2">var</span> name <span class="token">=</span> <span class="token4">"zhangsan"</span><span class="token1">;</span> <span class="token2">var</span> password <span class="token">=</span> <span class="token4">"1111111"</span><span class="token1">;</span> <span class="token2">var</span> obj <span class="token">=</span> <span class="token1">{</span> name<span class="token1">,</span> password<span class="token1">,</span> arr<span class="token1">:</span><span class="token1">[</span><span class="token5">1</span><span class="token1">,</span><span class="token5">2</span><span class="token1">,</span><span class="token5">3</span><span class="token1">,</span><span class="token5">4</span><span class="token1">]</span><span class="token1">,</span> <span class="token3">sayName</span><span class="token1">(</span><span class="token1">)</span><span class="token1">{</span> console<span class="token1">.</span><span class="token3">log</span><span class="token1">(</span><span class="token2">this</span><span class="token1">.</span>name<span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span><span class="token1">;</span> console<span class="token1">.</span><span class="token3">log</span><span class="token1">(</span>obj<span class="token1">)</span><span class="token1">;</span> <span class="token2">var</span> obj1 <span class="token">=</span> <span class="token1">{</span> age<span class="token1">:</span><span class="token5">20</span><span class="token1">,</span> <span class="token1">}</span><span class="token1">;</span> ``` ``` ### 2.Object.assign()方法 特點:淺拷貝、對象屬性的合并 ``` <pre class="calibre13">``` <span class="token2">var</span> nObj <span class="token">=</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span><span class="token1">}</span><span class="token1">,</span>obj<span class="token1">,</span>obj1<span class="token1">)</span><span class="token1">;</span><span class="token6">//花括號叫目標對象,后面的obj、obj1是源對象。對象合并是指:將源對象里面的屬性添加到目標對象中去,若兩者的屬性名有沖突,后面的將會覆蓋前面的 // console.log(nObj); // obj.sayName();//zhangsan // nObj.sayName();//zhangsan nObj.name = "lisi"; nObj.sayName = function(){ console.log(this.name); }; console.log(nObj); obj.sayName();//zhangsan nObj.sayName();//lisi nObj.arr[0] = 10; console.log(obj);//[10,2,3,4] console.log(nObj); //[10,2,3,4] //說明是淺拷貝,若要深拷貝,請考慮以前的方法(只是將源對象的引用給目標對象) //【注意】:當Object.assign()方法用于數組時: var arr11 = Object.assign([1,2,3],[4,5]); console.log(arr11);//[4,5,3] //[說明]:對象是根據屬性名來對應,數組是根據索引號來對應,相當于 var arr23 = { 0:1, 1:2, 2:3 };//相同的屬性名有0、1,后面的覆蓋前面的.</span> ``` ``` ### Object.assign()方法的用法 1. 合并多個對象 ``` <pre class="calibre14">``` <span class="token2">const</span> obj1 <span class="token">=</span> <span class="token1">{</span> name<span class="token1">:</span> <span class="token4">'張三'</span><span class="token1">,</span>age<span class="token1">:</span> <span class="token5">20</span><span class="token1">}</span><span class="token2">const</span> obj2 <span class="token">=</span> <span class="token1">{</span> address<span class="token1">:</span> <span class="token4">'廣東深圳'</span><span class="token1">,</span> hobby<span class="token1">:</span> <span class="token4">'code'</span> <span class="token1">}</span><span class="token2">const</span> obj3 <span class="token">=</span> <span class="token1">{</span> workingYears<span class="token1">:</span> <span class="token5">5</span><span class="token1">}</span> <span class="token2">const</span> obj <span class="token">=</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>obj1<span class="token1">,</span> obj2<span class="token1">,</span> obj3<span class="token1">)</span> console<span class="token1">.</span><span class="token3">log</span><span class="token1">(</span>obj<span class="token1">)</span> <span class="token6">//{ name: '張三', age: 20, address: '廣東深圳', hobby: 'code', workingYears: 5}</span> ``` ``` 2. 克隆對象(淺); ``` <pre class="calibre14">``` <span class="token2">const</span> obj <span class="token">=</span> <span class="token1">{</span> name<span class="token1">:</span> <span class="token4">'張三'</span> <span class="token1">,</span>age<span class="token1">:</span> <span class="token5">20</span><span class="token1">}</span> <span class="token2">const</span> obj1 <span class="token">=</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span><span class="token1">}</span><span class="token1">,</span>obj<span class="token1">)</span> console<span class="token1">.</span><span class="token3">log</span><span class="token1">(</span>obj1<span class="token1">)</span> <span class="token6">//{ name: '張三' ,age: 20}</span> ``` ``` 3. 為對象添加多個方法 ``` <pre class="calibre14">``` Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>SomeClass<span class="token1">.</span>prototype<span class="token1">,</span> <span class="token1">{</span> <span class="token3">someMethod</span><span class="token1">(</span>arg1<span class="token1">,</span> arg2<span class="token1">)</span> <span class="token1">{</span> <span class="token1">}</span><span class="token1">,</span> <span class="token3">anotherMethod</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token1">}</span><span class="token1">}</span><span class="token1">)</span><span class="token1">;</span><span class="token6">// 原來的方法SomeClass.prototype.someMethod = function (arg1, arg2) {};SomeClass.prototype.anotherMethod = function () {};</span> ``` ``` # 【ES6學習筆記之】Object.assign() ## 基本用法 `Object.assign`方法用于對象的合并,將源對象(source)的所有可枚舉屬性,復制到目標對象(target)。 ``` <pre class="calibre13">``` const target <span class="token">=</span> <span class="token1">{</span> a<span class="token1">:</span> <span class="token5">1</span> <span class="token1">}</span><span class="token1">;</span> const source1 <span class="token">=</span> <span class="token1">{</span> b<span class="token1">:</span> <span class="token5">2</span> <span class="token1">}</span><span class="token1">;</span> const source2 <span class="token">=</span> <span class="token1">{</span> c<span class="token1">:</span> <span class="token5">3</span> <span class="token1">}</span><span class="token1">;</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>target<span class="token1">,</span> source1<span class="token1">,</span> source2<span class="token1">)</span><span class="token1">;</span> target <span class="token6">// {a:1, b:2, c:3}</span> ``` ``` `Object.assign`方法的第一個參數是目標對象,后面的參數都是源對象。 注意,如果目標對象與源對象有同名屬性,或多個源對象有同名屬性,則后面的屬性會覆蓋前面的屬性。 ``` <pre class="calibre13">``` const target <span class="token">=</span> <span class="token1">{</span> a<span class="token1">:</span> <span class="token5">1</span><span class="token1">,</span> b<span class="token1">:</span> <span class="token5">1</span> <span class="token1">}</span><span class="token1">;</span> const source1 <span class="token">=</span> <span class="token1">{</span> b<span class="token1">:</span> <span class="token5">2</span><span class="token1">,</span> c<span class="token1">:</span> <span class="token5">2</span> <span class="token1">}</span><span class="token1">;</span> const source2 <span class="token">=</span> <span class="token1">{</span> c<span class="token1">:</span> <span class="token5">3</span> <span class="token1">}</span><span class="token1">;</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>target<span class="token1">,</span> source1<span class="token1">,</span> source2<span class="token1">)</span><span class="token1">;</span> target <span class="token6">// {a:1, b:2, c:3}</span> ``` ``` 如果只有一個參數,`Object.assign`會直接返回該參數。 ``` <pre class="calibre13">``` const obj <span class="token">=</span> <span class="token1">{</span>a<span class="token1">:</span> <span class="token5">1</span><span class="token1">}</span><span class="token1">;</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>obj<span class="token1">)</span> <span class="token">===</span> obj <span class="token6">// true</span> ``` ``` 如果該參數不是對象,則會先轉成對象,然后返回。 ``` <pre class="calibre13">``` typeof Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token5">2</span><span class="token1">)</span> <span class="token6">// "object"</span> ``` ``` 由于`undefined`和`null`無法轉成對象,所以如果它們作為參數,就會報錯。 ``` <pre class="calibre13">``` Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>undefined<span class="token1">)</span> <span class="token6">// 報錯</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token2">null</span><span class="token1">)</span> <span class="token6">// 報錯</span> ``` ``` 如果非對象參數出現在源對象的位置(即非首參數),那么處理規則有所不同。首先,這些參數都會轉成對象,如果無法轉成對象,就會跳過。這意味著,如果`undefined`和`null`不在首參數,就不會報錯。 ``` <pre class="calibre13">``` let obj <span class="token">=</span> <span class="token1">{</span>a<span class="token1">:</span> <span class="token5">1</span><span class="token1">}</span><span class="token1">;</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>obj<span class="token1">,</span> undefined<span class="token1">)</span> <span class="token">===</span> obj <span class="token6">// true</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>obj<span class="token1">,</span> <span class="token2">null</span><span class="token1">)</span> <span class="token">===</span> obj <span class="token6">// true</span> ``` ``` 其他類型的值(即數值、字符串和布爾值)不在首參數,也不會報錯。但是,除了字符串會以數組形式,拷貝入目標對象,其他值都不會產生效果。 ``` <pre class="calibre13">``` const v1 <span class="token">=</span> <span class="token4">'abc'</span><span class="token1">;</span> const v2 <span class="token">=</span> <span class="token5">true</span><span class="token1">;</span> const v3 <span class="token">=</span> <span class="token5">10</span><span class="token1">;</span> const obj <span class="token">=</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span><span class="token1">}</span><span class="token1">,</span> v1<span class="token1">,</span> v2<span class="token1">,</span> v3<span class="token1">)</span><span class="token1">;</span> console<span class="token1">.</span><span class="token3">log</span><span class="token1">(</span>obj<span class="token1">)</span><span class="token1">;</span> <span class="token6">// { "0": "a", "1": "b", "2": "c" }</span> ``` ``` 上面代碼中,`v1`、`v2`、`v3`分別是字符串、布爾值和數值,結果只有字符串合入目標對象(以字符數組的形式),數值和布爾值都會被忽略。這是因為只有字符串的包裝對象,會產生可枚舉屬性。 ``` <pre class="calibre13">``` <span class="token3">Object</span><span class="token1">(</span><span class="token5">true</span><span class="token1">)</span> <span class="token6">// {[[PrimitiveValue]]: true}</span> <span class="token3">Object</span><span class="token1">(</span><span class="token5">10</span><span class="token1">)</span> <span class="token6">// {[[PrimitiveValue]]: 10}</span> <span class="token3">Object</span><span class="token1">(</span><span class="token4">'abc'</span><span class="token1">)</span> <span class="token6">// {0: "a", 1: "b", 2: "c", length: 3, [[PrimitiveValue]]: "abc"}</span> ``` ``` 上面代碼中,布爾值、數值、字符串分別轉成對應的包裝對象,可以看到它們的原始值都在包裝對象的內部屬性`[[PrimitiveValue]]`上面,這個屬性是不會被`Object.assign`拷貝的。只有字符串的包裝對象,會產生可枚舉的實義屬性,那些屬性則會被拷貝。 `Object.assign`拷貝的屬性是有限制的,只拷貝源對象的自身屬性(不拷貝繼承屬性),也不拷貝不可枚舉的屬性(`enumerable: false`)。 ``` <pre class="calibre13">``` Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span>b<span class="token1">:</span> <span class="token4">'c'</span><span class="token1">}</span><span class="token1">,</span> Object<span class="token1">.</span><span class="token3">defineProperty</span><span class="token1">(</span><span class="token1">{</span><span class="token1">}</span><span class="token1">,</span> <span class="token4">'invisible'</span><span class="token1">,</span> <span class="token1">{</span> enumerable<span class="token1">:</span> <span class="token5">false</span><span class="token1">,</span> value<span class="token1">:</span> <span class="token4">'hello'</span> <span class="token1">}</span><span class="token1">)</span> <span class="token1">)</span> <span class="token6">// { b: 'c' }</span> ``` ``` 上面代碼中,`Object.assign`要拷貝的對象只有一個不可枚舉屬性`invisible`,這個屬性并沒有被拷貝進去。 屬性名為 Symbol 值的屬性,也會被`Object.assign`拷貝。 ``` <pre class="calibre13">``` Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span> a<span class="token1">:</span> <span class="token4">'b'</span> <span class="token1">}</span><span class="token1">,</span> <span class="token1">{</span> <span class="token1">[</span><span class="token3">Symbol</span><span class="token1">(</span><span class="token4">'c'</span><span class="token1">)</span><span class="token1">]</span><span class="token1">:</span> <span class="token4">'d'</span> <span class="token1">}</span><span class="token1">)</span> <span class="token6">// { a: 'b', Symbol(c): 'd' }</span> ``` ``` - - - - - - ## 注意點 ### (1)淺拷貝 `Object.assign`方法實行的是淺拷貝,而不是深拷貝。也就是說,如果源對象某個屬性的值是對象,那么目標對象拷貝得到的是這個對象的引用。 ``` <pre class="calibre13">``` const obj1 <span class="token">=</span> <span class="token1">{</span>a<span class="token1">:</span> <span class="token1">{</span>b<span class="token1">:</span> <span class="token5">1</span><span class="token1">}</span><span class="token1">}</span><span class="token1">;</span> const obj2 <span class="token">=</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span><span class="token1">}</span><span class="token1">,</span> obj1<span class="token1">)</span><span class="token1">;</span> obj1<span class="token1">.</span>a<span class="token1">.</span>b <span class="token">=</span> <span class="token5">2</span><span class="token1">;</span> obj2<span class="token1">.</span>a<span class="token1">.</span>b <span class="token6">// 2</span> ``` ``` 上面代碼中,源對象`obj1`的`a`屬性的值是一個對象,`Object.assign`拷貝得到的是這個對象的引用。這個對象的任何變化,都會反映到目標對象上面。 ### (2)同名屬性的替換 對于這種嵌套的對象,一旦遇到同名屬性,`Object.assign`的處理方法是替換,而不是添加。 ``` <pre class="calibre13">``` const target <span class="token">=</span> <span class="token1">{</span> a<span class="token1">:</span> <span class="token1">{</span> b<span class="token1">:</span> <span class="token4">'c'</span><span class="token1">,</span> d<span class="token1">:</span> <span class="token4">'e'</span> <span class="token1">}</span> <span class="token1">}</span> const source <span class="token">=</span> <span class="token1">{</span> a<span class="token1">:</span> <span class="token1">{</span> b<span class="token1">:</span> <span class="token4">'hello'</span> <span class="token1">}</span> <span class="token1">}</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>target<span class="token1">,</span> source<span class="token1">)</span> <span class="token6">// { a: { b: 'hello' } }</span> ``` ``` 上面代碼中,`target`對象的`a`屬性被`source`對象的`a`屬性整個替換掉了,而不會得到`{ a: { b: 'hello', d: 'e' } }`的結果。這通常不是開發者想要的,需要特別小心。 一些函數庫提供`Object.assign`的定制版本(比如 Lodash 的`_.defaultsDeep`方法),可以得到深拷貝的合并。 ### (3)數組的處理 `Object.assign`可以用來處理數組,但是會把數組視為對象。 ``` <pre class="calibre13">``` Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">[</span><span class="token5">1</span><span class="token1">,</span> <span class="token5">2</span><span class="token1">,</span> <span class="token5">3</span><span class="token1">]</span><span class="token1">,</span> <span class="token1">[</span><span class="token5">4</span><span class="token1">,</span> <span class="token5">5</span><span class="token1">]</span><span class="token1">)</span> <span class="token6">// [4, 5, 3]</span> ``` ``` 上面代碼中,`Object.assign`把數組視為屬性名為 0、1、2 的對象,因此源數組的 0 號屬性`4`覆蓋了目標數組的 0 號屬性`1`。 ### (4)取值函數的處理 `Object.assign`只能進行值的復制,如果要復制的值是一個取值函數,那么將求值后再復制。 ``` <pre class="calibre13">``` const source <span class="token">=</span> <span class="token1">{</span> get <span class="token3">foo</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> <span class="token2">return</span> <span class="token5">1</span> <span class="token1">}</span> <span class="token1">}</span><span class="token1">;</span> const target <span class="token">=</span> <span class="token1">{</span><span class="token1">}</span><span class="token1">;</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>target<span class="token1">,</span> source<span class="token1">)</span> <span class="token6">// { foo: 1 }</span> ``` ``` 上面代碼中,`source`對象的`foo`屬性是一個取值函數,`Object.assign`不會復制這個取值函數,只會拿到值以后,將這個值復制過去。 ## 常見用途 `Object.assign`方法有很多用處。 ### (1)為對象添加屬性 ``` <pre class="calibre13">``` class <span class="token3">Point</span> <span class="token1">{</span> <span class="token3">constructor</span><span class="token1">(</span>x<span class="token1">,</span> y<span class="token1">)</span> <span class="token1">{</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>this<span class="token1">,</span> <span class="token1">{</span>x<span class="token1">,</span> y<span class="token1">}</span><span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> <span class="token1">}</span> ``` ``` 上面方法通過`Object.assign`方法,將`x`屬性和`y`屬性添加到`Point`類的對象實例。 ### (2)為對象添加方法 ``` <pre class="calibre13">``` Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>SomeClass<span class="token1">.</span>prototype<span class="token1">,</span> <span class="token1">{</span> <span class="token3">someMethod</span><span class="token1">(</span>arg1<span class="token1">,</span> arg2<span class="token1">)</span> <span class="token1">{</span> ··· <span class="token1">}</span><span class="token1">,</span> <span class="token3">anotherMethod</span><span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> ··· <span class="token1">}</span> <span class="token1">}</span><span class="token1">)</span><span class="token1">;</span> <span class="token6">// 等同于下面的寫法</span> SomeClass<span class="token1">.</span>prototype<span class="token1">.</span>someMethod <span class="token">=</span> <span class="token2">function</span> <span class="token1">(</span>arg1<span class="token1">,</span> arg2<span class="token1">)</span> <span class="token1">{</span> ··· <span class="token1">}</span><span class="token1">;</span> SomeClass<span class="token1">.</span>prototype<span class="token1">.</span>anotherMethod <span class="token">=</span> <span class="token2">function</span> <span class="token1">(</span><span class="token1">)</span> <span class="token1">{</span> ··· <span class="token1">}</span><span class="token1">;</span> ``` ``` 上面代碼使用了對象屬性的簡潔表示法,直接將兩個函數放在大括號中,再使用`assign`方法添加到`SomeClass.prototype`之中。 ### (3)克隆對象 ``` <pre class="calibre13">``` <span class="token2">function</span> <span class="token3">clone</span><span class="token1">(</span>origin<span class="token1">)</span> <span class="token1">{</span> <span class="token2">return</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span><span class="token1">}</span><span class="token1">,</span> origin<span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> ``` ``` 上面代碼將原始對象拷貝到一個空對象,就得到了原始對象的克隆。 不過,采用這種方法克隆,只能克隆原始對象自身的值,不能克隆它繼承的值。如果想要保持繼承鏈,可以采用下面的代碼。 ``` <pre class="calibre13">``` <span class="token2">function</span> <span class="token3">clone</span><span class="token1">(</span>origin<span class="token1">)</span> <span class="token1">{</span> let originProto <span class="token">=</span> Object<span class="token1">.</span><span class="token3">getPrototypeOf</span><span class="token1">(</span>origin<span class="token1">)</span><span class="token1">;</span> <span class="token2">return</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>Object<span class="token1">.</span><span class="token3">create</span><span class="token1">(</span>originProto<span class="token1">)</span><span class="token1">,</span> origin<span class="token1">)</span><span class="token1">;</span> <span class="token1">}</span> ``` ``` ### (4)合并多個對象 將多個對象合并到某個對象。 ``` <pre class="calibre13">``` const merge <span class="token">=</span> <span class="token1">(</span>target<span class="token1">,</span> <span class="token1">.</span><span class="token1">.</span><span class="token1">.</span>sources<span class="token1">)</span> <span class="token">=</span><span class="token">></span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span>target<span class="token1">,</span> <span class="token1">.</span><span class="token1">.</span><span class="token1">.</span>sources<span class="token1">)</span><span class="token1">;</span> ``` ``` 如果希望合并后返回一個新對象,可以改寫上面函數,對一個空對象合并。 ``` <pre class="calibre13">``` const merge <span class="token">=</span> <span class="token1">(</span><span class="token1">.</span><span class="token1">.</span><span class="token1">.</span>sources<span class="token1">)</span> <span class="token">=</span><span class="token">></span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span><span class="token1">}</span><span class="token1">,</span> <span class="token1">.</span><span class="token1">.</span><span class="token1">.</span>sources<span class="token1">)</span><span class="token1">;</span> ``` ``` ### (5)為屬性指定默認值 ``` <pre class="calibre13">``` const DEFAULTS <span class="token">=</span> <span class="token1">{</span> logLevel<span class="token1">:</span> <span class="token5">0</span><span class="token1">,</span> outputFormat<span class="token1">:</span> <span class="token4">'html'</span> <span class="token1">}</span><span class="token1">;</span> <span class="token2">function</span> <span class="token3">processContent</span><span class="token1">(</span>options<span class="token1">)</span> <span class="token1">{</span> options <span class="token">=</span> Object<span class="token1">.</span><span class="token3">assign</span><span class="token1">(</span><span class="token1">{</span><span class="token1">}</span><span class="token1">,</span> DEFAULTS<span class="token1">,</span> options<span class="token1">)</span><span class="token1">;</span> console<span class="token1">.</span><span class="token3">log</span><span class="token1">(</span>options<span class="token1">)</span><span class="token1">;</span> <span class="token6">// ...</span> <span class="token1">}</span> ``` ``` 上面代碼中,`DEFAULTS`對象是默認值,`options`對象是用戶提供的參數。`Object.assign`方法將`DEFAULTS`和`options`合并成一個新對象,如果兩者有同名屬性,則`option`的屬性值會覆蓋`DEFAULTS`的屬性值。 注意,由于存在淺拷貝的問題,`DEFAULTS`對象和`options`對象的所有屬性的值,最好都是簡單類型,不要指向另一個對象。否則,`DEFAULTS`對象的該屬性很可能不起作用。 ``` <pre class="calibre13">``` const DEFAULTS <span class="token">=</span> <span class="token1">{</span> url<span class="token1">:</span> <span class="token1">{</span> host<span class="token1">:</span> <span class="token4">'example.com'</span><span class="token1">,</span> port<span class="token1">:</span> <span class="token5">7070</span> <span class="token1">}</span><span class="token1">,</span> <span class="token1">}</span><span class="token1">;</span> <span class="token3">processContent</span><span class="token1">(</span><span class="token1">{</span> url<span class="token1">:</span> <span class="token1">{</span>port<span class="token1">:</span> <span class="token5">8000</span><span class="token1">}</span> <span class="token1">}</span><span class="token1">)</span> <span class="token6">// {</span> <span class="token6">// url: {port: 8000}</span> <span class="token6">// }</span> ``` ``` 上面代碼的原意是將`url.port`改成 8000,`url.host`不變。實際結果卻是`options.url`覆蓋掉`DEFAULTS.url`,所以`url.host`就不存在了。
                  <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>

                              哎呀哎呀视频在线观看