javascript中常用函数和构造函数的比较

问题

什么是构造函数

构造函数和普通函数的区别是什么

当你使用新关键字时你做了什么

构造函数的返回值是什么

构造函数可以被调用为一个正常函数吗

以下是我的理解,误解的地方请大家帮我们纠正指正,谢谢!



这总是指向当前正在执行的函数或方法的所有者:


函数测试(){
console.log(本);
}
测试();
窗口/顶部:窗口:窗口,位置,位置,外部:对象,铬:对象…}


在代码的这一部分中,我们在页面中定义一个测试()函数,然后在页面中调用它。当函数在全局中定义时,它的所有者是当前页面,也就是窗口对象。

这种指向的几个例子

1。全球调用

this.name / /这指向窗口对象



2。函数调用

测试();这个函数的作用是指向窗口对象。



3的方法调用。对象

obj1.fn();这在fn()的obj1的 / / obj1对象点方法



4。调用构造函数

var =新狗(狗); / /构造函数在指向新创建的对象,是dogcall和应用

调用与应用程序相同,但它接受参数的方式不同,调用接受多个单独的参数,应用程序接受一系列参数。

调用和应用的功能可以简单地描述。当一个对象实例缺少一个函数方法时,它可以调用其他对象的就绪函数方法,通过改变其中的函数来改变函数运行时的上下文。

例如:


函数狗(){
这个声音=汪汪汪;
}
原型。树皮=函数(){
警报(这个声音);
}


现在我又有了一个猫对象:

猫叫声

我也希望这个猫对象调用树皮方法,所以它不需要重新定义树皮方法在那个时候。它可以用调用应用调用狗类的树皮方法。

dog.prototype.bark.call(猫);

或:

dog.bark.call(猫);

添加一些东西并用参数变为栗子:


函数狗(){
这个声音=汪汪汪;
}
原型。树皮=函数(词){
警报(这个声音+++);
}
var狗=新狗();
Dog.bark(贼); / /警报:王望小偷
dog.prototype.bark.call(猫,饿); / /警报:喵喵饿了


普通函数

这是一个简单的普通函数:


函数FN(){
警告(你好,希拉);
}
fn(); / /警报:你好,希拉


与构造函数相比,公共函数有四个明显的特性:

1。不需要用新关键字调用

FN();2。可以用返回语句返回一个值。


函数FN(a,b){
返回A+;
}
警报(FN(2,3));警告:5


3中不建议使用此关键字。功能

我们说不推荐使用,当然可以使用它。注意此时发生的事情,如果使用这个关键字来定义普通函数中的变量或函数,因为此时引用了窗口全局对象,所以它将向窗口添加一些全局变量或函数。


函数问候语(){
这个名字=希拉;
警报(++此名称);
}
问候语()
警报(窗口名称);


4。函数以驼峰模式命名,首字母为小写。

构造函数

在Javascript中,定义的构造函数用新关键字调用。默认是一个新的对象,它有构造函数定义的变量和函数方法。

栗子:


函数王子(姓名,年龄){
这个。性别=男性;
这是真的;
这个=真的;
这个名字=名字;
这个年龄=年龄;
}
王子的原型。tofrog =函数(){
console.log(王子+姓名+,变成了一只青蛙。);
}
王子=新王子
Prince.toFrog(); / /白马王子变成了青蛙。
prince.kind; / /真的


与普通函数相比,构造函数具有以下明显的特性:

1。用新关键字调用

王子=新王子

这个关键字可以在2以内使用。功能

在构造函数中,这指向构造的新对象。由此定义的变量或函数方法是实例变量或实例函数方法。您需要一个实例来访问它,并且不能使用类型名。

prince.age; / / 25

prince.age; / /未定义

三.默认值不使用返回值。

构造函数不需要用返回显式地返回值,默认值将返回这个,即一个新的实例对象。当然,也可以使用返回语句,返回值将根据返回值的类型而变化,下面将介绍详细信息。

4。函数命名建议第一个字母大写,与普通功能区分开。

不是在命名规范中,而是建议编写此规范。

当新关键字被实例化时会发生什么

以上文章中的王子()函数是一个栗子:

1。第一步,创建一个空对象。

var

2。在第二步中,构造函数王子()中的这个点指向新创建的对象,王子。

三.第三步,点王子王子的函数原型_proto_属性,并创建对象和原型的关系

4。第四步,在构造函数王子()中执行代码。

构造函数有返回值吗

在构造函数中没有显式调用返回时,默认是返回到这个对象,即新创建的实例对象。

在构造函数中调用返回时,有两种情况:

1.return是五简单数据类型:字符串、数字、布尔值、空值、不确定。

在这种情况下,返回值被忽略,这个对象仍然返回。

2.return对象

在这种情况下,它不返回这个对象,而是返回返回语句的返回值。


功能人(名称){
这个名字=名字;
返回{
}
var =新的人();
person.name; / /樱桃
对象{}