react原始碼閱讀 object assign

2021-09-22 10:20:04 字數 2076 閱讀 3464

var _assign = require('object-assign');
對應es6的object.assign合併兩個物件的屬性。

/*

object-assign

(c) sindre sorhus

@license mit

*/'use strict';

/* eslint-disable no-unused-vars */

// 獲取物件的symbols屬性方法

var getownpropertysymbols = object.getownpropertysymbols;

// 用來判斷某個物件是否含有指定的屬性,和 in 運算子不同,該方法會忽略掉那些從原型鏈上繼承到的屬性。

var hasownproperty = object.prototype.hasownproperty;

// propertyisenumerable() 方法返回乙個布林值,表示指定的屬性是否可列舉。通過原型鏈繼承的屬性除外。

var propisenumerable = object.prototype.propertyisenumerable;

// 建構函式建立乙個物件包裝器。

function toobject(val)

// 返回轉換後的物件

return object(val);

}// 是否使用原生屬性

function shouldusenative()

// 檢測老v8版本中有bug的屬性列舉順序。

// detect buggy property enumeration order in older v8 versions.

// object.getownpropertynames()方法返回乙個由指定物件的所有自身屬性的屬性名

// (包括不可列舉屬性但不包括symbol值作為名稱的屬性)組成的陣列。

// // object.getownpropertynames(test1) = ["0", "1", "2", "length"]

test1[5] = 'de';

// object.getownpropertynames(test1) = ["0", "1", "2", "5", "length"]

if (object.getownpropertynames(test1)[0] === '5')

// var test2 = {};

// 給物件test2新增屬性,對應的val值是從0~10

for (var i = 0; i < 10; i++)

// 遍歷test2的屬性名,返回對應的值,生成乙個新的陣列order2

// order2 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

var order2 = object.getownpropertynames(test2).map(function (n) );

// 如果屬性名和值不能一一對應,返回false

if (order2.join('') !== '0123456789')

// var test3 = {};

// test3是乙個屬性名和值相等的物件

'abcdefghijklmnopqrst'.split('').foreach(function (letter) );

// 獲取根據test3與乙個空物件合併生成的新物件的所有key值,並轉換成字串

if (object.keys(object.assign({}, test3)).join('') !==

'abcdefghijklmnopqrst')

return true;

} catch (err)

}// 如果瀏覽器支援es6,就使用原生的,否則需要相容處理

module.exports = shouldusenative() ? object.assign : function (target, source)

} if (getownpropertysymbols)

}} }

return to;

};

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

原始碼閱讀 Glide原始碼閱讀之with方法(一)

前言 本篇基於4.8.0版本 原始碼閱讀 glide原始碼閱讀之with方法 一 原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 大多數情況下,我們使用glide 就一句 但是這一句 裡面蘊含著成噸的 with方法有以下幾個過載方法 publi...

原始碼閱讀 Glide原始碼閱讀之load方法(二)

原始碼閱讀 glide原始碼閱讀之load方法 二 原始碼閱讀 glide原始碼閱讀之into方法 三 首先,load方法有以下幾個過載方法 public requestbuilder load nullable bitmap bitmap public requestbuilder load nu...