<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<script>
//1我们可以抛开类,使用字面量来构造一个对象
var People1 ={
name : "chenzhitao",
printname : function(){
console.log(People1.name);
}
}
People1.printname();
//问题:太麻烦了,每次构建一个对象都是复制一遍代码如果想个性化,只能通过手工赋值,使用者必需了解对象详细
//这两个问题其实也是我们不能抛开类的重要原因,也是类的作用
//2使用函数做自动化
function createObj(age,name){
var obj = {
nick:name,
age:age,
printName:function(){
console.log(this.nick);
}
};
return obj;
}
var obj3 = new createObj("25","chenzhitao");
obj3.printName();
//问题:这种方法解决了构造过程复杂,需要了解细节的问题,但是构造出来的对象类型都是Object,没有识别度
//3 new 运算符接受一个函数 F 及其参数
function People (age,name) {
this.name = name;
this.age = age;
this.printname = function(){
console.log(age,name);
}
}
var p1 = new People(25,"chenzhitao");
p1.printname();
//问题:构造函数在解决了上面所有问题,同时为实例带来了类型,但可以注意到每个实例printName方法实际上作用一样,但是每个实例要重复一遍,大量对//象存在的时候是浪费内存
//4.抽象重复
//所有实例都会通过原型链引用到类型的prototype,prototype相当于特定类型所有实例都可以访问到的一个公共容器
function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.printName = function(){
console.log(this.name);
}
var p2 = new Person("chenzhitao",25);
p2.printName();
</script>
</head>
</html>
网友评论