js构造函数和原型的关系,构造函数 实例对象 原型对象的关系
面向对象的思想是一个抽象的过程——实例化的过程。我们可以通过JS构造函数创建实例化对象,那么实例化对象和构造函数是什么关系呢?用一个代码例子来讨论一下吧~
//自定义构造函数
职能人员(姓名、年龄、性别)
{
this.name=name
this.age=年龄;
this.gender=性别;
this.eat=function()
{
Console.log(吃蒜拌臭豆腐榴莲酱);
};
}构造函数-创建对象依据
var per=新人(琳达,23,女);
补充:console.dir(per)可以打印出对象per的结构(属性和属性值)。
从上面,我们可以得到实例对象和构造函数之间的关系如下:
1.实例对象是由构造函数创建的——创建的过程称为实例化。
2.如何判断一个对象是否是构造函数实例化的结果?(推荐第二种)
1)通过构造函数,即实例对象。构造函数==构造函数名:console . log(dog . constructor==animal);
2)构造函数实例对象instance的名称:console.log(动物的doginstance
构造函数来创建对象可能会导致问题。让我们看看下面的例子。
职能人员(姓名、年龄){
this.name=name
this.age=年龄;
this.eat=function () {
Console.log(今天吃红烧土豆);
}
}
Var per1=新人(小白,20);
Var per2=新人(小黑,30);
per 1 . eat();
per 2 . eat();
通过打印结果为false可以得出结论per1,per2并不共享eat方法,那么这很容易推论出通过自定义构造函数创建的对象实例并不节约内存空间,以此引出了原型来解决这个问题。
职能人员(姓名、年龄){
this.name=name
this.age=年龄;
}
//通过原型添加方法,解决数据共享,节省内存空间。
person . prototype . eat=function(){
Console.log(吃凉菜);
};
P1=newperson(小明,20);
P2=newperson(小红,30);
通过打印结果,我们发现P1和P2共享eat方法,实现了数据共享,节省了内存空间。但是我们看实例对象的结构,并没有发现eat方法,但是对象确实可以调用eat方法。原因是什么?
接下来我们来看一下建造师人的结构。
通过console.dir(p1)查看一个对象的结构时,我们发现它除了age,name属性之外,还有一个_proto_ attribute。值是一个对象,在JavaScript中称为隐式原型。对象的隐式原型指向对象的构造函数的原型,这也确保了实例可以访问构造函数原型中定义的属性和方法。
总结 JS构造函数-实例对象-原型对象之间的关系
1.构造函数可以实例化对象;
2.构造函数中有一个属性叫prototype,是构造函数的原型对象;
3.实例对象的原型对象(__proto__)指向此构造函数的原型对象;
4.构造器的原型对象中的方法可以被实例对象直接访问;
5.原型的作用是共享数据,节省内存空间;
6.需要共享的数据在原型中定义,不需要共享的数据写在构造函数中;
JS构造器-实例对象-原型对象的关系细节就是这样。请多关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。