JS:使用构造函数创建对象以及instanceof的使用

上篇文章所使用的工厂方法创建的对象,使用的构造函数都是Object,所以创建出来的对象都是Object类型,会导致我们无法区分多种不同类型的对象(如果创建的对象有人,动物,服饰,美食,这些类型都是Object,无法区分)。

// 人类
function person(name,age,sex){
            var obj = new Object();
            obj.name = name;
            obj.age = age;
            obj.sex = sex;
            return obj;
		}
        var per = person("小明",17,"男");
        console.log(per); // 属于Object类型
// 美食类
function food(name,taste){
            var obj = new Object();
            obj.name = name;
            obj.taset = taste;
            return obj;
        }
        var food = food("橙子","酸的");
        console.log(food); // 属于Object类型

所以,我们可以自己创建一个构造函数,专门用来创建Person对象。
构造函数没有new Object,但是它后台会自动var obj = new Object。
this就相当于obj。
构造函数不需要返回对象引用return,会后台自动返回。

构造函数就是一个普通函数,创建方式和普通函数没区别,不同的是,构造函数习惯上首字母大写
还有一点是构造函数和普通函数的调用方式不同,普通函数是直接调用,而构造函数需要使用new关键字调用
构造函数执行流程:
1.只要出现了new,会立即创建一个对象
2.将新建的对象设置为函数中的this,在构造函数中可以使用this来引用新建的对象
3.返回执行函数中的代码
4.将新建的对象作为返回值返回

function Person(name,age,sex){
          this.name = name;
          this.age = age;
          this.sex = sex;
       }
var per = new Person("小沙",23,"男");
// 返回的是Person对象,而不再是Object
console.log(per); 

 function Food(name,taste){
          this.name = name;
          this.taste = taste;
      }
var food = new Food("山楂","酸甜的");
// 返回的是food对象,而不再是Object
console.log(food);

输出的结果如下:
Person是Person,Food是Food,方便我们更好的区分多种不同类型的对象。
在这里插入图片描述
使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类,比如Person类,Food类。
我们将通过一个构造函数创建的对象,成为是该类的实例,比如per是Person的实例,food是Food的实例。
instanceof
使用instanceof可以检查一个对象是否是另一个类的实例。
语法:对象 instanceof 构造函数。
如果是返回true,反之返回false。
举例:

console.log(per instanceof Person); // true
console.log(food instanceof Person); // false
console.log(food instanceof Object); // true
console.log(per instanceof Object); // true

tips:
所有对象都是Object的后代,所以任何对象和Object做instanceof检查,都会返回true。
this情况补充:

  1. 当以函数形式调用时,this是window;
  2. 当以方法形式调用时,谁调用了方法this就是谁;
  3. 当以构造函数的形式调用时,this酒拾新创建的那个对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值