金沙4787官网-澳门金沙4787.com|www.4787.com【官方网站】

您的位置:金沙4787官网 > 教育资讯 > 请教JS的普通函数跟构造方法的区别

请教JS的普通函数跟构造方法的区别

2019-09-10 18:32

  这段js代码中 两个test是不是同一个对象。。。 如果不是,请大大们解释一下。。。

  顺便说一下 请教JS的普通函数跟构造方法的区别吧。。。谢了 各位大大展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  在fun1()方法中通过varobj=newfun()创建了一个对象。fun()是一个特殊的函数构造函数,它和普通的函数有什么区别和联系我将在下边谈论。注意到上边有两种形式定义变量。this.name和varage.其实通过this方式创建的变量叫做对象的成员变量,可以在外部通过对象引用。而varage是一个局部变量(如果放到外层,是一个全局变量)这个变量不能被对象在外部引用(如obj.age)否则是undefine,可以将它看成是一个对象的私有成员变量。

  接下来看看看构造函数的执行过程。首先执行varobj=newfun()这一步后,记录现场,然后跳到fun()的构造函数中,执行alert(good)跳出对话框。接下来就是创建成员变量了(如java中在堆中创建内存空间,创建栈)。好了fun()执行完了,回到fun1(),执行下去。注意一点,alert(obj.age)是undefine.

  这里functionfun2()是一个函数,但是它是构造函数吗?你可以将它当做一个构造函数。这里会发现fun1()中的alert()可以正常执行。这里可以总结为任何函数都可以new,在js中函数就是对象。但是试想一下这里new有意义吗?fun2()中没有变量,或者都是var定义的变量,那么在外部引用不了。new它干嘛呢?,还不如让fun2()作为全局函数执行好了。

  这里可以回答本章的要探索的问题了:任何函数都是构造函数,如果通过new就可以得到一个对象。通过函数不同的上下文调用分下面几种:

  (2).当一个函数使用call或者apply调用时,给定的第一个参数即为上下文;

  (3).否则,如果一个函数作为一个对象的属性(obj.func)或者obj[func])来调用时,它就把该对象作为上下文来运行;

  //上边newfun2()没意义,直接fun2()调用,这里在全局上下文运行

  你写的test.bb和vartest完全不是一个东西,test.bb();是可以执行的。你试试把bb放入test里看看还能用这样的方法执行吗?

本文链接:请教JS的普通函数跟构造方法的区别