函数是初始化实例对象,其原型属性是继承实例对象。本文将分享javascript构造函数的详细讲解,让对js构造函数感兴趣的朋友一起学习。
函数是初始化实例对象,其原型属性是继承实例对象。
施工人员注意事项:
1.默认函数是大写的。
2.构造函数没有返回任何东西。new运算符将自动创建给定的类型并返回它们。调用构造函数时,new会自动创建这个对象,类型是构造函数类型。
3.调用返回也可以显示在构造函数中。如果返回值是一个对象,将返回它而不是新创建的对象实例。如果返回值是原始类型,它将被忽略,并将返回新创建的实例。
功能人(姓名){
this.name=name
}
var p1=新人(' John ');
相当于:
功能人(姓名){
Object obj=new Object();
obj.name=name
返回obj
}
var P1=person(' John ');
4.因为构造函数也是一个函数,可以直接调用,但是它的返回值是未定义的。此时,构造函数中的这个对象等于全局的这个对象。This.name实际上是在创建一个全局变量名。在严格模式下,通过new调用Person构造函数时,会出现错误。
5.您还可以在构造函数中使用Object.defineProperty()方法来帮助我们初始化:
功能人(姓名){
Object.defineProperty(this,' name'{
get :function(){
返回名称;
},
集合:函数(新名称){
name=newName
},
Enumerable :true,//enumerable,默认为false。
可配置:真//可配置
});
}
var p1=新人(' John ');
6.在构造函数中使用原型对象
//这比直接在构造函数中编写要高效得多
person . prototype . say name=function(){
console . log(this . name);
};
但如果方法多了,大多数人会采用更简洁的方法:直接用对象的字面形式替换原型对象,如下:
Person.prototype={
sayName :function(){
console . log(this . name);
},
toString :function(){
return“[Person ' this . name ']”;
}
};
这种方法非常流行,因为您不必多次键入Person.prototype,但是有一个副作用您必须注意:
以文字形式重写原型对象会改变构造函数的属性,因此它指向Object而不是Person。这是因为原型对象有一个构造函数属性,而其他对象实例没有。当创建一个函数时,它的prototype属性也被创建,prototype对象的constructor属性指向该函数。当原型对象以对象的文字形式重写时,其构造函数属性将被设置为泛型Object对象。为了避免这种情况,您需要在重写原型对象时手动重置构造函数,如下所示:
Person.prototype={
施工方:人,
sayName :function(){
console . log(this . name);
},
toString :function(){
return“[Person ' this . name ']”;
}
};
再次测试:
p1 .构造者===人
真实的
p1.constructor===Object
错误的
p1人员实例
真实的
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。