十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
call,map,apply等 都可以叫js方法。
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于做网站、成都网站制作、高碑店网络推广、小程序设计、高碑店网络营销、高碑店企业策划、高碑店品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供高碑店建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
你说的这个比较宽泛。
其实简单理解就是一个方法实现了一个功能,让你用起来方便。
/*第一种方法,使用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();
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关键字实例化,具有和工厂方式相同的弊端,不推荐使用
有两种方法:
方法一:在页面的script中写JS文档;
script type="text/javascript"
//直接写js
/script
方法二:引入外部的JS文档,
script type="text/javascript" src="你的文档地址"/script
备注:js文件最好的是防在页面底部!在WEB页面中,THML元素内,任何一个地方都可以写JS。
还有种就是在HTML元素中直接写js,我个人是不建议使用这种方式,在后面的维护是非常困难的,还不利于后期的查看,代码不直观!