大学虽然学习的是java,但出来后一直搞得是前端,对于构造函数已经忘得差不多了,有一段时间自己一直分不来在JS中什么是普通函数什么是构造函数,后来百度了一下,总算是理解明白了!相关解释如下:
<script type="text/javascript"> function fun(){ alert("good"); var age = 1; this.name = 'Mr S.G'; this.method = fun2; } function fun2(){ alert("this is the second method show"); } function fun1(){ var obj = new fun(); alert(obj.name); obj.method(); alert(obj.age); } window.onload = fun1; </script>
在fun1()方法中通过var obj = new fun()创建了一个对象。
fun() 是一个特殊的函数 构造函数,它和普通的函数有什么区别和联系我将在下边谈论。
注意到上边有两种形式定义变量。this.name 和 var age .其实通过this方式创建的变量叫做对象的成员变量,可以在外部通过对象引用。
而 var age 是一个局部变量 (如果放到外层,是一个全局变量) 这个变量不能被对象在外部引用(如obj.age)否则是undefine,可以将它看成是一个对象的私有成员变量。
接下来看看看构造函数的执行过程。
首先执行var obj = new fun()这一步后,记录现场,然后跳到fun()的构造函数中,执行alert(“good”)跳出对话框。
接下来就是创建成员变量了(如java 中在堆中创建内存空间,创建栈)。
好了fun()执行完了,回到fun1(),执行下去。
注意一点,alert(obj.age)是undefine.
我现在想知道哪些函数可以new(),哪些不可以new().
<script type="text/javascript"> function fun2(){ alert("this is the second method show"); } function fun1(){ var obj = new fun2(); alert(obj); alert('if display there no erro through the call'); } window.onload = fun1; </script>
这里 function fun2()是一个函数,但是它是构造函数吗?
你可以将它当做一个构造函数。这里会发现fun1()中的alert()可以正常执行。
这里可以总结为任何函数都可以new,在js中函数就是对象。
但是试想一下这里new有意义吗? fun2()中没有变量,或者都是var 定义的变量,那么在外部引用不了。
new它干嘛呢? ,还不如让fun2()作为全局函数执行好了。
这里可以回答本章的要探索的问题了: 任何函数都是构造函数,如果通过new就可以得到一个对象。通过函数不同的上下文调用分下面几种:
(1). 当在一个函数调用之前有new关键字,则上下文为新建的对象;
//任何函数可以new 创建一个对象
(2). 当一个函数使用call或者apply调用时,给定的第一个参数即为上下文;
//构造方法中可以写成员方法。然后通过对象来调用
(3). 否则,如果一个函数作为一个对象的属性(obj.func)或者obj[‘func’])来调用时,它就把该对象作为上下文来运行;
//上边new fun2()没意义,直接 fun2()调用,这里在全局上下文运行
(4)如果与上述几条都不符的话,则函数将在全局上下文中运行。
你写的test.bb 和var test完全不是一个东西,test.bb();是可以执行的。
你试试把bb放入 test里 看看还能用这样的方法执行吗?
var test = new Object(); test.aa = function(){ alert("aa"); } test.bb= function(){ alert("bb"); }
这样写才是一个对象
共有 0 条评论