//使用工厂模式创建对象,构造函数都是object,不能区分多种不同的对象
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>工厂模式创建对象
</title>
</head>
<body>
<script type="text/javascript">
//使用工厂模式创建对象,构造函数都是object,不能区分多种不同的对象
function createPerson(name,age,gender){
//创建一个新的对象
var obj =new Object();
//向对象中添加属性
obj.name = name;
obj.age = age;
obj.gender = gender;
obj.sayName = function(){
alert(this.name);
};
return obj;
}
var obj2 = createPerson("猪八戒",99,"男");
var obj3 = createPerson("孙悟空",8,"女");
var obj4 = createPerson("候子",90,"男");
console.log(obj2);
console.log(obj3);
console.log(obj4);
//构造函数,
/*构造函数和普通函数不同就是调用方式不同
普通函数是直接调用 ,构造函数使用new关键字调用
新建的对象设置成函数的this,构造函数中使用this引用新建的对象
创建的方法也叫类
调用的per,per1,per2也叫实例,类的实例化
*/
function Person(name,age,gender){
this.name = name;
this.age = age;
this.gender = gender;
}
var per = new Person('张三',20,'男');
var per1 = new Person('李四',21,'女');
var per2 = new Person('王五',22,'男');
console.log(per);
console.log(per1);
console.log(per2);
console.log(per instanceof Person);//使用instanceof可以检查一个对象是否是一个类的实例(对象 instanceof 构造函数)
//原型
// 每个函数都有默认的prototype属性,这个函数对应着一个对象,这个对象就是我们所谓的原型对象
// 当构造函数调用prototype时,创建的对象都有一个隐含属性,使用__proto__访问
function Myclass(){
sayHello = '十四';
}
var mc = new Myclass();
// console.log(Myclass.prototype);
// console.log(mc.__proto__==Myclass.prototype);
mc.a = '我是mc中的a';
function Mybatic(){
}
Mybatic.prototype.name = '我是原型的名字';
var mc = new Mybatic();
console.log(mc.name);//打印新添加的属性
//使用in检查对象中是否含有某个属性,如果对象中没有但是原型有,也会返回true
// console.log('name' in mc);
// 使用hasOwnProperty检查对象中是否含有该属性,使用该方法只有当对象有这个属性才会返回true
console.log(mc.hasOwnProperty('age'));
</script>
</body>
</html>