/*第一种方法,使用function语句,格式如下*/function fn(){ alert("这是使用function语句进行函数定义"); }fn();/*第二种方法,使用Function()构造函数克隆函数*/var F = new Function("a","b","alert(a+b)"); F(a,b);其实相当于如下代码:function F(a,b){ alert(a+b); }/*第三种方法,使用函数直接量*/var zhenn = function(){ alert("zhenn"); } zhenn();。
定义函数的种方法1.
最基本的作为一个本本分分的函数声明使用。
复制代码代码如下:function func(){}或var func=function(){};2.
作为一个类构造器使用:复制代码代码如下:function class(){}
class.prototype={};
var item=new class();3.
作为闭包使用:复制代码代码如下:(function(){
//独立作用域})();4.
可以作为选择器使用:复制代码代码如下:var addEvent=new function(){
if(!-[1,]) return function(elem,type,func){attachEvent(elem,'on'+type,func);};
else return function(elem,type,func){addEventListener(elem,type,func,false);}
};//避免了重复判断5.
在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型(“prototype”)方式 5.动态原型方式-- 1.基于已有对象扩充其属性和方法object.name = "zhangsan";object.sayName = function(name){ this.name = name; alert(this.name);}object.sayName("lisi");-- 2.工厂方式 function createObject() { var object = new Object(); object.username = "zhangsan"; object.password = "123"; object.get = function() { alert(this.username + ", " + this.password); } return object;}var object1 = createObject();var object2 = createObject();object1.get(); -- 采用带参数的构造方法:function createObject(username, password){ var object = new Object(); object.username = username; object.password = password; object.get = function() { alert(this.username + ", " + this.password); } return object;}var object1 = createObject("zhangsan", "123");object1.get();。
JS函数的定义方式比较灵活,它不同于其他的语言,每个函数都是作为一个对象被维护和运行的。
先看几种常用的定义方式:function func1([参数]){/*函数体*/}var func2=function([参数]){/*函数体*/};var func3=function func4([参数]){/*函数体*/};var func5=new Function();上述第一种方式是最常用的方式,不用多说。第二种是将一匿名函数赋给一个变量,调用方法:func2([函数]);第三种是将func4赋给变量func3,调用方法:func3([函数]);或func4([函数]);第四种是声明func5为一个对象。
再看看它们的区别:function func(){//函数体}//等价于var func=function(){//函数体}但同样是定义函数,在用法上有一定的区别。用同样的方法可以去理解第三种定义方式。
Javascript中定义函数的方式有多种,函数直接量就是其中一种。
如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。
方式1,调用函数,得到返回值。强制运算符使函数调用执行(function(x,y){ alert(x+y); return x+y; }(3,4)); 方式2,调用函数,得到返回值。
强制函数直接量执行再返回一个引用,引用再去调用执行(function(x,y){ alert(x+y); return x+y;} )(3,4); 这种方式也是很多库爱用的调用方式,如jQuery,Mootools。 方式3,使用voidvoid function(x) { x = x-1; alert(x);}(9);。
JS函数的定义方式比较灵活,它不同于其他的语言,每个函数都是作为一个对象被维护和运行的。
先看几种常用的定义方式:function func1([参数]){/*函数体*/}var func2=function([参数]){/*函数体*/};var func3=function func4([参数]){/*函数体*/};var func5=new Function();上述第一种方式是最常用的方式,不用多说。第二种是将一匿名函数赋给一个变量,调用方法:func2([函数]);第三种是将func4赋给变量func3,调用方法:func3([函数]);或func4([函数]);第四种是声明func5为一个对象。
再看看它们的区别:function func(){//函数体}//等价于var func=function(){//函数体}但同样是定义函数,在用法上有一定的区别。用同样的方法可以去理解第三种定义方式。
第四种定义方式也是需要声明对象后才可以引用。
Javascript对象定义的几种方式一.工厂方式:先创建对象,再向对象添加方法和属性,封闭后调用不要使用new操作符创建对象。
使用这种方法有很多弊端,把方法定义在工厂函数内部的时候,每次调用的时候都会产生新的函数function factory(name,person,address,time){ var tmp=new Object; tmp.name=name; tmp.person=person; tmp.address=address; tmp.workTime=function(){ alert("we start to work at" + time); } return tmp;}var factory1=factory("drugs",100,"huashan Rd",10);var factory2=factory("TCMdrugs",100,"hongqiao Rd",11);factory1.workTime();factory2.workTime();//Here,factory1 and factory2 have different method对这种问题虽然可以用下面的方式改进,但是缺乏很好的封装性function factory(name,person,address,time){ var tmp=new Object; tmp.name=name; tmp.person=person; tmp.address=address; tmp.workTime=workTime(); return tmp;}function workTime(){ alert("we start to work at" + this.time);}二,构造函数方式,在构造函数内部不创建对象,使用this关键字,使用时候用new操作符,存在和工厂方式相同的问题,重复创建函数。function counstruct(name,person,address,time){ this.name=name; this.person=person; this.address=address; this.workTime=function(){ alert("we start to work at" + this.time); };}三.原型方式:利用prototype属性来实现属性和方法,可以通过instanceof 检查对象类型,解决了重复创建函数的问题,但不能通过传递参数初始化属性function Car(){}Car.prototype.color = "red";Car.prototype.doors = 4;Car.prototype.mpg = 23;Car.prototype.showColor = function(){ alert(this.color);};var car1 = new Car();var car2 = new Car();但是如果遇到下面的情况,又出问题了Car.prototype.drivers = new Array("mike", "sue");car1.drivers.push("matt");alert(car1.drivers); //outputs "mike,sue,matt"alert(car2.drivers); //outputs "mike,sue,matt"drivers是指向Array对象的指针,Car的两个实例都指向同一个数组。
四.混合的构造函数/原型方式:针对原型方式的解决方案function Car(sColor, iDoors, iMpg){ this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("mike", "sue");}Car.prototype.showColor = function (){ alert(this.color);};var car1 = new Car("red", 4, 23);var car2 = new Car("blue", 3, 25);car1.drivers.push("matt");alert(car1.drivers);alert(car2.drivers);五.动态原型方式:这种方式是极力推荐的方式,避免了前面几种方式所出现的问题,提供了更友好的编码风格function Car(sColor, iDoors, iMpg){ this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("mike", "sue"); if(typeof Car.initialized == "undefined"){ Car.prototype.showColor = function (){ alert(this.color); }; Car.initialized = true; }}var car1 = new Car("red", 4, 23);var car2 = new Car("blue", 3, 25);car1.drivers.push("matt");alert(car1.drivers);alert(car2.drivers);六.混合工厂方式:和工厂方式有些相似,但采用new关键字实例化,具有和工厂方式相同的弊端,不推荐使用。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
蜀ICP备2020033479号-4 Copyright © 2016 学习鸟. 页面生成时间:3.107秒