<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h2>面向对象</h2>
<pre>
一切皆为对象
对象是类的一个实例,对象有属性和方法,对象表示属性的无序集合
声明对象
var person = {
name: "张三",
age: 20
}
2.构造函数创建对象
用来创建对象的函数
与普通函数的区别:
首字母大写
里面的this所指的是实例对象
没有return语句,直接返回对象
调用构造函数时,new会自动创建this对象,且类型就是构造函数类型
对象有一个constructor属性,指向他的构造函数
3.prototype原型模式
javascript里面,每一个构造函数都有一个prototype属性,指向另一个对象,这个对象的所有属性和方法都会被构造函数的实例继承
所以,我们可以把那些不变的属性和方法定义在prototype对象上。
辅助方法:
isPrototypeOf() 判断对象是否继承了构造函数的prototype属性
hasOwnProperty()
用来判断某一个属性是自己的属性还是prototype的属性
如果是自己的,则返回true
如果是继承prototype的,则返回false
delete 删除属性
in 用来判断某个实例是否含有某个属性
还可以遍历某个对象的属性
</pre>
<script>
var person = {
name: "张三",
age: 20,
show: function(){
alert(this.name)
}
}
person.height = "180";
// person.show();
// alert(person.height);
//alert(person.name)
//通过构造函数来创建对象
function Person(name,age){
this.name = name;
this.age = age;
//this.type = "人类";
}
Person.prototype.type = "人类";
Person.prototype.sayHi = function(){
alert("hello!");
}
var p1 = new Person("张三", 20);
p1.type = "黄种人";
var p2 = new Person("李四", 23);
//alert(p1.constructor == p2.constructor);
//alert(p1.type) //黄种人
//console.log(p1)
// p1.sayHi();
// p2.sayHi();
//alert(Person.prototype.isPrototypeOf(p1));//true
//alert(p2.hasOwnProperty("type"));
// delete p1.type;
// alert(p1.type); //人类
// alert("type" in p1); //true
for(var k in p1){
console.log(k+":" + p1[k])
}
// 输出
/*name:张三
age:20
type:人类
sayHi:function (){
alert("hello!");
}*/
</script>
</body>
</html>