Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么是原型,$.extend和;把这个退回来;你必须做什么?_Javascript_Jquery_Backbone.js - Fatal编程技术网

Javascript 什么是原型,$.extend和;把这个退回来;你必须做什么?

Javascript 什么是原型,$.extend和;把这个退回来;你必须做什么?,javascript,jquery,backbone.js,Javascript,Jquery,Backbone.js,我在做一个遗留项目,我对它的作用感到困惑 define(['jquery', 'components/BaseComponent', 'bootstrap'], function( $, BaseComponent, bootstrap ) { 'use strict'; return BaseComponent.extend({ initialize: function(options) { BaseComponent.pr

我在做一个遗留项目,我对它的作用感到困惑

define(['jquery', 'components/BaseComponent', 'bootstrap'], function(
    $, BaseComponent, bootstrap
) {
    'use strict';

    return BaseComponent.extend({

        initialize: function(options) {

            BaseComponent.prototype.initialize.call(this, options); // what is this man?
            this.widgetOptions = $.extend({}, options); // what is this man?

            return this; // what is this man?
        },

        render: function() {

            BaseComponent.prototype.render.call(this); //again?


            return this; //again?
        }
    });
});
我有开发木偶应用程序的经验,但上面的代码仍然让我困惑。没有文档,执行此操作的人已经离开。

继承和调用父函数 首先,一些信息:

  • 介绍
  • BaseComponent
    是一个构造函数(),它具有。这个helper函数包含了该函数的一些复杂性

  • BaseComponent.prototype
    是包含函数和属性的父类的原型

  • BaseComponent.prototype.initialize
    是父类(
    BaseComponent
    )的一个函数,我们通过为此模块定义一个新的
    initialize
    来覆盖它

“类”的函数包含在。通过对父对象原型中的函数使用,我们可以在当前对象的上下文中调用该函数

复制对象 这将创建一个新对象,其中将复制
选项的属性。这是使用,它使一个浅拷贝

这是一个很好的模式,因为:

  • 它确保
    this.widgetOptions
    是一个对象
  • 它是一个副本,因此您可以安全地修改属性,而不会影响接收到的
    选项
    对象(调用代码可以重用该对象)
  • 链接函数调用 这样做的目的是:

    myView.render().lookImChaining().functionCalls();
    
    render
    函数中,它是主干标准。但是在initialize中,它没有任何意义,因为您从未实际手动调用initialize

    从:

    一个好的约定是在渲染结束时返回该值以启用 连锁电话

    委员会:

    继承和调用父函数 首先,一些信息:

    • 介绍
    • BaseComponent
      是一个构造函数(),它具有。这个helper函数包含了该函数的一些复杂性

    • BaseComponent.prototype
      是包含函数和属性的父类的原型

    • BaseComponent.prototype.initialize
      是父类(
      BaseComponent
      )的一个函数,我们通过为此模块定义一个新的
      initialize
      来覆盖它

    “类”的函数包含在。通过对父对象原型中的函数使用,我们可以在当前对象的上下文中调用该函数

    复制对象 这将创建一个新对象,其中将复制
    选项的属性。这是使用,它使一个浅拷贝

    这是一个很好的模式,因为:

  • 它确保
    this.widgetOptions
    是一个对象
  • 它是一个副本,因此您可以安全地修改属性,而不会影响接收到的
    选项
    对象(调用代码可以重用该对象)
  • 链接函数调用 这样做的目的是:

    myView.render().lookImChaining().functionCalls();
    
    render
    函数中,它是主干标准。但是在initialize中,它没有任何意义,因为您从未实际手动调用initialize

    从:

    一个好的约定是在渲染结束时返回该值以启用 连锁电话

    委员会:


    所有这些都是基本的JavaScript模式。事实上,链接不仅限于JavaScript,因为链接在许多编程语言中都是适用的。所有这些都是基本的JavaScript模式。事实上,链接不仅限于JavaScript,因为链接在许多编程语言中都是适用的。重写意味着什么?我们可以使用
    BaseComponent
    中提供的方法?
    prototype
    如何在这里发挥作用?为什么不仅仅是
    BaseComponent.initialize.call()
    ?过度隐藏意味着您的BaseComponent有一个名为initialize的方法,而您发布的代码也有一个同名的方法,因为您是从BaseComponent继承的,所以您的代码会覆盖BaseComponent的initialize方法。请尝试从BaseComponent.prototype.initialize.call(此选项)中删除该原型字。您将获得最大调用堆栈大小Reach错误,因为initialize将继续调用自身。@JessJordan我添加了许多指向其他信息的链接。重写意味着什么?我们可以使用
    BaseComponent
    中提供的方法?
    prototype
    如何在这里发挥作用?为什么不仅仅是
    BaseComponent.initialize.call()
    ?过度隐藏意味着您的BaseComponent有一个名为initialize的方法,而您发布的代码也有一个同名的方法,因为您是从BaseComponent继承的,所以您的代码会覆盖BaseComponent的initialize方法。请尝试从BaseComponent.prototype.initialize.call(此选项)中删除该原型字。您将获得最大调用堆栈大小Reach错误,因为initialize将继续调用自身。@Jessi添加了许多指向其他信息的链接。
    return this; // what is this man?
    
    myView.render().lookImChaining().functionCalls();
    
    render: function() {
        return this;
    },