设计模式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 设计模式:是一套 广为人知、可复用、 编目分明的代码书写方式。
// 委托模式、节流器、工厂模式、安全类 之前讲过
// 迭代器模式: 在不暴露内部结构的情况下 顺序的遍历内部数据
// var arr = ["a", "b", "c", 'd', "e", "f", "g"];
// ES5中的数组迭代器
// arr.forEach(function(value) {
// console.log(value)
// })
// 定义一个用于迭代数组和对象的通用迭代器
function each(target, fn) {
// 判断 target是数组还是对象
// 方式1 target instanceOf Array 用instanceof
console.log(target instanceof Array);
// 方式2 target.constructor
console.log(target.constructor);
// 方式3 Object.prototype.toString.call(target) (推荐第三种)
console.log(Object.prototype.toString.call(target))
if (Object.prototype.toString.call(target) === '[object Array]') {
// 说明是数组
for (var i = 0; i < target.length; i++) {
fn(target[i], i);
}
} else if (Object.prototype.toString.call(target) === '[object Object]') {
for (var i in target) {
fn(target[i], i)
}
}
}
var arr = ["a", "b", "c", 'd', "e", "f", "g"];
each(arr, function(value, index) {
console.log(value, index)
});
var obj = {
a: 1,
b: 2,
c: 3,
d: 4
}
each(obj, function(value, index) {
console.log(value, index)
})
</script>
</body>
</html>