构造函数函数
上一章咱们讲了工厂模式,它的缺点就是没法识别到底哪一个属于哪一个的问题。咱们能够用构造函数来解决这个识别问题。this
//构造函数 function Create(a,b) { this.a =a; this.b =b; this.c = function () { return this.a + this.b; }; } var box = new Create('abc',10); alert(box.run()); //返回abc10
咱们参考上一章,发现构造函数和工厂模式的区别:
1.没有集中实例化
2.没有返回对象实例
3.直接将属性和方法赋值给thisspa
1.咱们不须要在构造函数内集中实例化,由于在建立构造函数的同时,后台会自动建立一个实例化。
2.咱们不须要返回这个对象的实例化,由于它是后台自动返回的。
3.this就至关于工厂模式的obj.a;指针
解决对象实例归属问题code
若是咱们想查看归属问题。必需要建立两个构造函数:对象
function Create(a,b) { this.a =a; this.b =b; this.c = function () { return this.a + this.b; }; } function DeskTop(a,b) { this.a =a; this.b =b; this.c = function () { return this.a + this.b; }; } var box = new Create('abc',10); var box1 = new DeskTop('def',20); alert(box instanceof Object); //这里要注意:全部的构造函数的对象都是Object. alert(box instanceof Create); //true alert(box1 instanceof Create); //false alert(box1 instanceof DeskTop); //true
构造函数编写规范:blog
1.构造函数也是函数,可是函数名的第一个字母大写
2.必须使用new运算符
3.必须使用new + 等同上面的函数名(首字母大写)例如:var box = new Create();内存
构造函数和普通函数的区别:原型
1.普通函数,首字母无需大写
2.构造函数,用普通函数调用方式无效it
构造函数内的方法是:基本类型 or 引用类型??
咱们能够经过例子来看出来究竟是普通类型仍是引用类型:
function Create(a,b) { this.a =a; this.b =b; this.c = function () { return this.a + this.b; }; } var abc = new Create('abc',10); var abc1 = new Create('abc',10);
咱们讲两个传一样的值。来比较构造函数内的值就能够看出究竟是什么类型。
alert(abc.a == abc1.a); //true //由于传进去的实参相同,确定是相同的 alert(abc.b == abc1.b); //true //同上 alert(abc.c == abc1.c); //false //这里看出,他们比较的是引用地址,你们都知道引用地址确定不相等!
基本数据类型的变量存放的是基本类型数据的实际值。而引用数据类型的变量保存对它的引用,即指针。
注:为何用abc.c而不是abc.c(),由于abc.c是表示的引用地址,而abc.c()是返回这个引用类型的值。
若是你们还没懂为何,能够用一张图来解释:
基本类型和引用类型
虽然这个与今天的话题好像没啥太大关系。可是我感受咱们仍是有必要复习一下基础知识。
基本类型:
基本类型的比较是值的比较
基本类型是存放在栈内存中的。
基本类型的值是没法改变的。
引用类型:
引用类型的值是能够改变的。
引用类型的比较是引用的比较
引用类型是同时存放在栈内存和堆内存中的。
(栈内存中存放的是这个变量名,而堆内存存放的是地址,咱们去调用时会有一个指针指向堆内存的。)
而每次实例化,地址都不相同,因此比较引用类型的地址确定不相同!!!
下一章咱们来说原型。
文章内容有错误请及时联系做者指正!谢谢!
**Brian Lee**