# baseConformsTo
# Description
conformsto
的基本实现,接受 props
检查。
会对 object 的 指定 props 属性做检查,检查函数由source提供
# Params
(object, source, props)
{Object} object
{Object} source
# Return
Boolean
# Code
function baseConformsTo(object, source, props) {
let length = props.length
if (object == null) {
return !length
}
object = Object(object)
while (length--) {
const key = props[length]
const predicate = source[key]
const value = object[key]
if ((value === undefined && !(key in object)) || !predicate(value)) {
return false
}
}
return true
}
# Analyze
- 首先拿到
props.length
, 判断传入的object
是否为null
或者undefined
,如果是则返回!length
即可。如果有要检测的 属性则返回false
,否则返回true
- 使用
Object()
构造函数,将object
包装为一个新对象 ,基础类型也会转为object
- 使用
while
循环遍历,条件为length--
,在条件中已经进行了递减,在代码块中就从length - 1
开始 - 首先从
props
中获取对应的key
, 根据key
分别从source
和object
中拿到predicate
和value
- 判断
key
是否在object
和其原型链 上存在,或者value
不通过predicate
的校验,则返回false
- 如果全部通过校验,并且 所有
key
都在object
和其原型链上,则返回true
# Remark
- Object () 构造函数 MDN (opens new window)
- in MDN (opens new window) 如果指定的属性在指定的对象或其原型链中,则in 运算符返回 true
# Example
const a = {a: 1, b: 2}
const b = Object.create(null)
b['a'] = b['b'] = x => x > 0
baseConformsTo(a, b, ['a', 'b']) // true