2016-12-29 7 views
0

React Redux(5.0.1)のソースコードを読むと、私が実際に理解していない行があることがわかります。ここで ReduxのshallowEqualソースコードのバグに対処するか、

は、ソースコード、および githubへのリンクです:ループの最初で

const hasOwn = Object.prototype.hasOwnProperty 

export default function shallowEqual(a, b) { 
    if (a === b) return true 

    let countA = 0 
    let countB = 0 

    for (let key in a) { 
     if (hasOwn.call(a, key) && a[key] !== b[key]) return false 
     countA++ 
    } 

    for (let key in b) { 
     if (hasOwn.call(b, key)) countB++ 
    } 

    return countA === countB 
} 

、COUNTAは、場合にのみ増加させなければならないとだけ「キー」場合は独自のプロパティがありますか?

Object.prototype.bar = "bar" 

それはバグや目的にあるかどうかわからない:プロトタイプでプロパティがある場合はそれ以外の場合は、shallowEqualはいつものような、falseを返します。 助けて説明してください。ありがとう。

答えて

0

あなたは正しいと思います。

for (let key in a) { 
    if (hasOwn.call(a, key)){ 
     if(a[key] !== b[key]){ 
      return false 
     }else{ 
      countA++ 
     } 
    } 
} 

は、そうでなければ、これはfalseを出力します:

let obj1 = {a:1} 

let obj2 = {b:1} 
obj2.__proto__ = obj1 

let obj3 = {b:1} 
obj3.__proto__ = obj1 

console.log(shallowEqual(obj2 , obj3)) 
このようなものでなければなりません
関連する問題