javascript代码实例教程-javascript的笔记

发布时间:2019-02-26 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了javascript代码实例教程-javascript的笔记脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
小宝典致力于为广大程序猿(媛)提供高品质的代码服务,请大家多多光顾小站,小宝典在此谢过。 好久没写东西了,最近有些迷茫(好吧,是借口),也是好久没有接触js的内容了,今天就借此契机,顺便复习下吧。

 

就看看javascript中的函数四大调用模式和this的关系

 

1.方法调用模式

 

当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时,this被绑定到该对象。如果一个调用表达式包含一个属性存取表达式(即一个.点表达式或[subscript]下标表达式),那么它被当做一个方法来调用。

方法可以使用this去访问对象,所以它能从对象中取值或修改该对象。

初看比较难以理解,就是说,对象里面是可以有方法的

Object fangShui={

  eng:1,

  chn:2,

  say:function(flagstatus){//say这个方法是对象的字面量,原型连到fangShui,方法内部是可以访问对象的字面量的

    if(flagStatus===this.eng){//eng是对象的字面量

      alert(";makewater");

    }else if(flagStatus===this.chn){//chn也是对象的字面量

      alert("fangshui");

    }else{

    }

  }

};

fangShui.say(1);

 

结果就是makewater

 

2.函数调用模式

 

当一个函数并非一个对象的属性时,那么它被当做一个函数来调用:

VAR sum=add(3,4);

当函数以此模式调用时,this被绑定到全局对象。这是语言设计上的一个错误。倘若语言设计正确,当内部函数被调用时,this应该仍绑定到外部函数的this变量。这个设计错误的后果是方法不能利用内部函数来帮助它工作,因为内部函数的this被绑定了错误的值,所以不能共享该方法对对象的访问权。幸运的是,有一个很容易的解决方案:如果该方法定义一个变量并给它赋值为this,那么内部函数就可以通过那个变量访问到this按照约定,我们给那个变量命名为that

举个例子:

function shaZhuDe(PRefixarg){

  this.prefix=prefixArg;

  var that=this;

  function shaZhuDAO(daos2){//这个函数的上下文被不幸地绑到了全局变量,本应该被绑到其外部函数即shaZhuDe的上下文的

    return that.prefix+" "+daos2;//还好有that可以补救下,如果是this的话如果全局变量也有个变量prefix,就出问题了,如果全局变量没有prefix那就是undefined。额,,也会出问题。

  }

  return {getDao:shaZhuDao};//that为该函数的局部变量,也是上下文,可以访问该函数的变量prefix。为了让that这个变量更有用,使用了闭包,即方法返回对象,对象是可以访问方法的私有变量的,方法消亡,方法中的私有变量并不消亡。

}

var shaZhu=shaZhuDe("shazhudao");

shaZhu.getDao("shaniudao");//结果是'shazhudao shaniudao'

3.构造器调用模式

 

javascript是一门基于原型继承的语言。这意味着对象可以直接从其他对象继承属性。该语言是无类别的。

如果在一个函数前面带上new来调用,那么将创建一个隐藏连接到该函数的prototyPE成员的新对象,同时this将会被绑定到那个新对象上。new前缀也会改变return语句的行为。

var Quo = function(string){

    this.status=string;

   }

Quo.prototype.get_status = function(){

    return this.status;

}

//构造一个Quo实例该实例的status属性也是可以通过外部访问的所以get_status方法纯粹是画蛇添足。

var myQuo=new Quo("confused");//既然是外部可以直接访问的,为什么还要额外添加一个函数来提供访问的入口呢?

document.wrITeln(myQuo.get_status());

document.writeln(myQuo.status);

//var quo=Quo("confused");//我们用这个quo来引用没有new前缀的构造函数它只是执行了一遍,并没有返回任何值

//document.writeln(quo.get_status());//这里浏览器将不会输出任何内容了,quo并不是对象。这就给我们造成了困惑

借此,我们引出apply模式。

4.Apply模式

 

Apply方法让我们构建一个参数数组,并用其去调用函数。它也允许我们选择this的值。apply方法接收两个参数,第一个是将被绑定给this的值。第二个就是一个参数数组。

 

举个例子:

 

var shaZhuDe=function(dao){

 

  this.dao=dao;

 

}

 

shaZhuDe.prototype.shenmeDao=function(){

 

  return this.dao;

 

}

 

var shaNiuDe={

 

  dao:'牛刀';

 

};

 

var dao = shaZhuDe.prototype.shenmeDao.apply(shaNiuDe);

 

暴力吧,现在杀猪的可以用牛刀了这里是把this绑定到shaNiuDe上面了,shenmeDao这个方法就调用shaNiuDe这个对象里面的字面量dao。

 

 

 

为了更加直观地看到这一点,再写个例子:

 

 

var dao="i am ok";//这个status是全局变量

var dao3=shaZhuDe.prototype.shenmeDao.apply(this);//把函数上下文绑定到this,即全局

alert(dao3);//显示:i am ok

 

 

 

 

看起来像便魔,用的多了就习惯了。

 

总结下,apply模式是否可以看成这样呢?

 

javascript看成是外层的大方法,该方法中有:全局变量(可看成方法中的私有变量),其他的像array,document,自定义的对象都是对对象的定义,大方法中还有方法function ss(){},也有对方法的引用比如var sss=function(){};也有new出来的对象,比如var quo=new Object();

 

Object,array,document,都是名副其实的function,而且它们之中也包含着子方法(function),和它们自己的私有变量。

 

那么,传入上下文和参数就是在某一个方法(function)中传入上下文和需要的参数了。上下文是为了方法中可能会调用this的私有变量,参数就不多说了,一切都是为了方法能够完成功能啊。

觉得可用,就经常来吧! 脚本宝典 欢迎评论哦! js脚本,巧夺天工,精雕玉琢。小宝典献丑了!

脚本宝典总结

以上是脚本宝典为你收集整理的javascript代码实例教程-javascript的笔记全部内容,希望文章能够帮你解决javascript代码实例教程-javascript的笔记所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。