构造函数模式
就是构造一个''类'',因为类是''函数''数据类型的,所以我通过写一个函数来表示一个类
"(自定义类)"
这就叫构造函数模式
怎样让他表示一个类呢?
1.最好函数名首字母是大写
2.通过"new"这个关键词来创造一个变量,那这个变量叫"实例"
--> var 实例=new 类
3.通过''this"给这个实例增加私有的''属性名''和''赋属性值''
通过"new"一个类的具体实例步骤:
1.预解释
2.自动生成一个this(代表当前实例),通过this给实例增加属性名和属性值
3.默认将创建好的实例this返回,所以不需要写''return''
假如说我写了return
1.return 基本数据类型,不会对他造成影响
2.return 引用数据类型,就会改变实例的值,return谁实例就是谁
注意!
var obj=new F<相等>var obj=new
每个实例之间地址都不一样
"所有的实例都是对象"
function Fn(){
this.name="a";
this.age=1;
this.f=function(){
console.log(this);
}
}
var obj1= new Fn();
var obj2= new Fn();
var obj3= new Fn();
var obj=Fn();-->undefined
函数:
1.普通的函数,就代表一个方法
2.类 自定义类
3.它属于Function类的一个实例
var obj1=new Fn();
new:就是构造函数创建方式,Fn函数就是一个类,obj1就是Fn类的一个实例
Fn()创建过程:
1.形成一个私有作用域
2.预解释
3.创建一个实例,这个实例就是this
4.代码执行的时候,通过this给实例增加私有属性并赋值
5.会默认返回当前的这个实例this
注意:
1.通过this给实例增加的是自有属性,每个实例之间的私有属性是私有的不一样的
2.不用写retrun直接返回this,如果你写了,写的是基本数据类型的没有影响,如果你写的是引用数据类型的就会把this修改了,你写的啥就返回啥
3.var obj=new Fn() 跟var obj=new Fn 一样没区别
function fn(name,age){
var obj={};
obj.name=name;
obj.age=12;
retrun obj
}
var obj=fn();
==================
function Fn(){
this.name="aa";
this.age=12;
}
var obj1=new Fn();
obj1是Fn这个类的一个具体的实例
var obj2=new Fn();
obj2是Fn这个类的一个具体的实例
================
var num=1;
function XX(){
var num=12;
this.num=10;
this.x=100;
this.y=function(){
console.log(this.x+m)
}
}
var x1=new XX();
console.log(x1.x,x1.num);
x1.y();
var x2=new XX();
console.log(x1.x=x2.x);
console.log(x1.y=x2.y);
=====================