浅谈OOP Javascript [2] -- 构造函数

构造函数函数

上一章咱们讲了工厂模式,它的缺点就是没法识别到底哪一个属于哪一个的问题。咱们能够用构造函数来解决这个识别问题。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**
相关文章
相关标签/搜索