构造函数模型(基础)

构造函数模型

案例一
>>工厂模式
function creatjsPerson(name,age){
    
    
var obj={
    
    };
obj.name=name;
obj.age=age;
obj.writeJs=function(){
    
    
console.log("my name is "+this.name +",i can write js");
};
return obj;
}
var p1=cretejsperson("小白",18);
p1.writeJs();
var p1=cretejsperson("大白",28);
p2.writeJs();

构造函数模式的目的解释为了创建一个自定义函数和它的实例

案例二
>>构造函数
function creat(name, age){
    
    
obj.name=name; 
obj.age=age;
obj.write=function (){
    
    
console.log("i can write"+obj.name);
};
}
var p1=new creat("xiaobai",13);
p1.write();
var p2=new creat("xiaohei",15);
p2.write();

构造函数模式与工厂模式的区别:

1、执行的时候

普通函数执行 creatjsPerson()
构造函数模式 new creatjsPerson() 通过new执行后,creatjsPerson就是一个类

案例三
创建一个数组:
var ary =[];
>>字面量方式
var ary = new array();
>>实例创建的方式
>>构造函数模式执行的方法
不管哪一种方式ary都是array这个类的一个实例
2、在函数代码执行的时候

相同:都是形成一个私有作用域 形参赋值——预解释——代码从上到下执行(类和普通函数一样,有普通的一面)
不同:在代码执行的之前,不用手动创建一个对象,浏览器会默认的创建一个对象数据类型的值(这个对象就是当前类的实例),接下来代码从上到下执行,以当前的实例为执行的主体(this),把属性名、属性值赋值给实例,最后,浏览器会默认返回实例

案例二拓展
function creat(name, age){
    
    
//p1 浏览器默认创建>>this
this.name=name;  
//p1.name=name;
this.age=age;
this.write=function (){
    
    
console.log("i can write"+this.name);
};
}
>>浏览器把创建的实例默认的进行返回
var p1=new creat("xiaobai",13);
p1.write();
var p2=new creat("xiaohei",15);
p2.write();

结论

1、
js中所有的类都是函数数据类型,通过new变成了一个类,但是本身也是一个普通的函数
js中所有的实例都是对象数据类型
2、
this的第四种形式>>day four
在构造函数中,类中(函数体中)出现this.xxx=xxx,中的this代表这个类的实例
3、
p1、p2都是creat的类的实例,都有write的方法,都是不同实例的方法不一样
在类中给实例增加的属性(this.xxx=xxx)属于当前实例的私有的属性,实例和实例之间是单独的个体,所以私有的属性之间是不相等的
console.log(p1.write === p2.write);>>false

案例三
var p1=cretejsperson("小白",18);
>>creatjsPerson>>this p1
p1.writeJs();
>>writeJs>>this p1

var res = creatjsPerson("小黑",17);
>>这样写不是构造函数模式执行,而是普通函数模式执行,由于没有写return,所以res=undefined,并且creatjsPerson这个方法中的this是window
console.log(res);
>>undefined

猜你喜欢

转载自blog.csdn.net/yilingpupu/article/details/105486194