构造函数和实例对象之间的关系
面向对象的思想是:抽象的过程--->实例化的过程
如下:
自定义构造函数--->实例化对象:
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
this.eat=function(){
console.log("吃榴莲");
}
}
构造函数--->创建对象
var per=new Person("小白",18,"男"); //这个就叫构造函数创建对象
实例对象是通过构造函数来创建
实例对象会指向自己的构造函数(暂时这么理解,其实是错误的)
然后把这个对象和构造函数的结构显示出来:
console.dir(per); //显示对象的结构
console.dir(Person); //显示构造函数的结构
实例对象 per 的构造器(构造函数)是指向 Person 的
console.log(per.constructor===Person);
console.log(per.__proto__.constructor===Person.prototype.constructor);
以上两种方式都可以进行判断
判断per实例对象是否和Person相等,如果结果是true,那么per实例对象就是通过Person来创建的,否则不是
注释:
console.dir(); 是在console中显示出该 变量 或者 对象 或者 函数 等东西的结构
构造器(constructor):其实就是构造函数的意思,实例对象中的构造器指向该实例对象是通过谁来创建的,如图:
所以该实例对象是通过Person来创建的
例子2:
//构造函数
function Ainmal(name){
this.name=name;
}
//实例对象
var dog=new Animal("大黄");
console.log(dog); //实例对象
console.log(Animal); //构造函数的名字
//判断该实例对象是不是通过该构造函数创建的
console.log(dog.__proto__.constructor===Person);
console.log(dog.__proto__.constructor===Animal);
//判断这个对象是不是这种数据类型---以下两种方式都可以
console.log(dog.constructor===Animal);
console.log(dog instanceof Person); //使用 instanceof 关键字 ,一般推荐使用该方法进行判断
总结:
实例对象和构造函数之间的关系:
1.实例对象是通过构造函数来创建的--->创建的过程叫实例化
2.如何判断对象是不是这个数据类型?
1)通过构造器的方式 实例对象.构造器==构造函数名字
2)对象名字 instanceof 构造函数名字
尽可能的使用第二种方式来识别