zoukankan      html  css  js  c++  java
  • 类的进阶

    apply的两个参数分别是上下文和参数组成的数组。

    function.apply(this, [1, 2, 3]);

    call的两个参数是多个,也就是不用数组包裹参数。

    function.call(this, 1, 2, 3);

    常常会遇到事件内部没有this的情况,怎么处理呢?

    低级方法:

    $('.clicky').click(function(){
      $(this).hide();
    });
    
    $('p').each(function(){
      $(this).remove();
    });
    var clicky = { 
      wasClicked: function(){
    /* ... */ }, addListeners: function(){   var self = this;
      $('.clicky').click(function(){   self.wasClicked() }); } }; clicky.addListeners();

    高阶方法:

    var proxy = function(func, thisObject){ 
      return(function(){
      return func.apply(thisObject, arguments); });
    };
    
    var clicky = { wasClicked: function(){
    /* ... */ },
    addListeners: function(){ 
      var self = this;
      $('.clicky').click(proxy(this.wasClicked, this)); } };

    jQuery中proxy()用来实现将上下文传给事件的回调函数的功能

    $('.clicky').click($.proxy(function(){ /* ... */ }, this));

    apply还可以用来作委托:

    var App { log: function(){
    if (typeof console == "undefined") return;
    //arguments是当前调用的作用域内解释器内置的用来保存参数的“数组”。
    //因为他是不可变的,需要jquery.makArray()把它转换成真的数组。
    var args = jQuery.makeArray(arguments);
    // 插入一个新的参数 
    args.unshift("(App)");
    // 委托给console 
    console.log.apply(console, args);
    } };

    待续。。

  • 相关阅读:
    C#读取资源文件的两种方法及保存资源文件到本地
    T4模板编辑器
    VS (Visual Studio) 快捷键
    以太网帧类型速查
    线程间操作无效: 从不是创建控件“XXX”的线程访问它
    C# 集合
    C#控件之ListView
    C# Color颜色对照表
    Java的内存需要划分成为5个部分:
    Java学习:数组的使用和注意事项
  • 原文地址:https://www.cnblogs.com/haimingpro/p/3823038.html
Copyright © 2011-2022 走看看