forin循环
<!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>
function People(name, age, sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
People.prototype.sayHello = function() {
console.log("大家好,我是" + this.name + ",我今年" + this.age + "岁, 我是" + this.sex + "的")
}
// class People {
// constructor(name, age, sex) {
// this.name = name;
// this.age = age;
// this.sex = sex;
// }
// sayHello() {
// console.log("大家好,我是" + this.name + ",我今年" + this.age + "岁, 我是" + this.sex + "的")
// }
// }
var p = new People("小红", 13, '女');
console.log(p)
for (var i in p) {
console.log(i)
console.log(p.hasOwnProperty(i))
}
// for in 循环可以循环到 function 定义的类的原型上的方法
// for in 循环不可以循环到 class 定义的类的原型上的方法
// 为了解决这样的问题 ES5中提供了一个方法 hasOwnProperty() 该方法可以被任何实例调用
// console.log(Object.prototype.__proto__); null
// 举例: 复制对象的时候 可以判定属性是否是自身的属性
// var p = new People("小红", 13, '女');
// console.log(p)
// var obj = {}
// for (var i in p) {
// if (p.hasOwnProperty(i)) {
// obj[i] = p[i]
// }
// }
</script>
</body>
</html>