账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    关于gulp源码上继承的问题
    17
    0

    问题描述

    在看gulp@4.0.0的源码,发现Gulp函数使用call继承了Undertaker函数并且可以访问到Undertaker函数prototype上的方法。可是call的方法继承不是访问不到原型链上的方法么?

    问题出现的环境背景及自己尝试过哪些方法

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)
    /Undertaker/
    'use strict';

    var inherits = require('util').inherits;
    var EventEmitter = require('events').EventEmitter;

    var DefaultRegistry = require('undertaker-registry');

    var tree = require('./lib/tree');
    var task = require('./lib/task');
    var series = require('./lib/series');
    var lastRun = require('./lib/last-run');
    var parallel = require('./lib/parallel');
    var registry = require('./lib/registry');
    var _getTask = require('./lib/get-task');
    var _setTask = require('./lib/set-task');

    function Undertaker(customRegistry) {
    EventEmitter.call(this);

    this._registry = new DefaultRegistry();
    if (customRegistry) {

    this.registry(customRegistry);

    }

    this._settle = (process.env.UNDERTAKER_SETTLE === 'true');
    }

    inherits(Undertaker, EventEmitter);

    Undertaker.prototype.tree = tree;

    Undertaker.prototype.task = task;

    Undertaker.prototype.series = series;

    Undertaker.prototype.lastRun = lastRun;

    Undertaker.prototype.parallel = parallel;

    Undertaker.prototype.registry = registry;

    Undertaker.prototype._getTask = _getTask;

    Undertaker.prototype._setTask = _setTask;

    module.exports = Undertaker;

    /gulp/
    'use strict';
    console.log("project-gulp@4.0.0")
    var util = require('util');
    var Undertaker = require('undertaker');
    var vfs = require('vinyl-fs');
    var watch = require('glob-watcher');

    function Gulp() {
    Undertaker.call(this);
    console.log("**")
    console.log(Undertaker.prototype);
    console.log("**")
    // Bind the functions for destructuring
    this.watch = this.watch.bind(this);
    this.task = this.task.bind(this);
    this.series = this.series.bind(this);
    this.parallel = this.parallel.bind(this);
    this.registry = this.registry.bind(this);
    this.tree = this.tree.bind(this);
    this.lastRun = this.lastRun.bind(this);
    this.src = this.src.bind(this);
    this.dest = this.dest.bind(this);
    this.symlink = this.symlink.bind(this);
    }

    你期待的结果是什么?实际看到的错误信息又是什么?

    0
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 10 元积分
        全部回答
    • 0
    • 沐沁ど彼岸花※ 普通会员 1楼

      在Gulp中,源代码上的继承可以通过extends关键字来实现。extends关键字用于在已有代码的基础上创建一个新的代码块,而不需要重新编写。

      例如,如果你有一个名为src的文件夹,里面有一个名为app.js的文件,你需要在一个新的文件夹dest中使用Gulp来生成多个输出文件。你可以这样做:

      1. dest文件夹中创建一个名为dist的文件夹。

      2. app.js文件中,创建一个名为main的函数:

      javascript function main() { // ... }

      1. dest文件夹中创建一个名为styles的文件夹,并在其中创建一个名为style.css的文件:

      javascript function main() { // ... var styles = require('./styles'); var html = ` <style> /* Style here */ </style> `; return html + styles; }

      1. src文件夹中创建一个名为scripts的文件夹,并在其中创建一个名为script.js的文件:

      javascript function main() { // ... var scripts = require('./scripts'); var html = ` <script> // Script here </script> `; return html + scripts; }

      1. dest文件夹中创建一个名为images的文件夹,并在其中创建一个名为image.png的文件:

      javascript function main() { // ... var images = require('./images'); var html = ` <img src="${images.image.png}"> `; return html + images; }

      1. src文件夹中创建一个名为test的文件夹,并在其中创建一个名为test.js的文件:

      javascript function main() { // ... var tests = require('./test'); var html = ` <script> // Test here </script> `; return html + tests; }

      在这个例子中,我们使用了Gulp的require函数来加载app.jsstyles.css,然后使用concat函数来合并这些文件,并使用html函数来生成HTML输出。

      请注意,这个例子只是一个基本的示例,你可能需要根据你的具体需求来调整和扩展它。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部