Javascript模块继承

时间:2016-07-11 09:15:38

标签: javascript

父模块,

var Component = function () {
    var _componentName;
    var _test = 'ts';
    return {
        getName: function(){
            console.log('getName() is called');
            console.log(this._componentName);
            console.log(_test);
            return _componentName;
        }
    };
};

module.exports = Component;

子模块,

var Component = require('./component');

var Skip_button = function () {
    var skipBtn = Component();
    skipBtn._componentName = 'Skip_Btn';
    return skipBtn;
};

module.exports = Skip_button;

在另一个地方,当我打电话

var skipBtn = Skip_button();
skipBtn.getName();

如果在Component中为console.log(this._componentName);,则可以成功打印出该值。但是,如果是console.log(_componentName);,则会出现未定义的错误。任何的想法?

[更新] 看一下这个。它按预期工作。 http://jsfiddle.net/nedvedyy/Lvxqjo9v/1所以问题仍然存在,如果console.log(this._componentName);更改为console.log(_componentName);

,为什么它在我上面的原始代码示例中不起作用?

2 个答案:

答案 0 :(得分:1)

  

但是,如果是console.log(_componentName);,则会出现undefine错误   有

这是因为当您在匿名方法中执行[TestMethod,Isolated] public void Isolate_OwinContext_Request_Query_Should_Be_Queryable() { // Arrange var key = Constants.AuthorizeRequest.ClientId; var collection = new Dictionary<string, string[]>() { {key, new[]{"1", "2", "3"} }, {"B", new[]{"4", "5", "6"} } }; // Can it be simpler than this? var fakeContext = Isolate.Fake.Instance<IOwinContext>(); Isolate.WhenCalled(() => fakeContext.Request.Query). WillReturnCollectionValuesOf(collection.AsQueryable()); // Act var result = Program.SetUpQuery(fakeContext, null); // Assert CollectionAssert.AreEquivalent(collection[key], result); } 并且return Skip_button;不在全局上下文中时,它将返回Skip_button

如果您只是希望能够继承方法undefined并希望能够调用Skip_button,那么只需替换

getName

return Skip_button;

<强>样本

&#13;
&#13;
return skipBtn ;
&#13;
&#13;
&#13;

答案 1 :(得分:0)

Component功能_componentName_test不在this范围内。但是,如果您在skipBtn._componentName函数中设置Skip_button,则表示您在_componentName范围内设置了this。 这就是console.log(this._componentName)打印'Skip_Btn'

的原因

var Component = function () {
    var _componentName;
    var _test = 'ts';
    return {
        getName: function(){
            console.log('getName() is called');
            console.log(this._componentName);
            console.log(this._test);
            return _componentName;
        }
    };
};

var Skip_button = function () {
    var skipBtn = Component();
    skipBtn._componentName = 'Skip_Btn';
    return skipBtn ;
};

var skipBtn = Skip_button();
skipBtn.getName();

如果您运行上述脚本this._test将打印'未定义',因为_test范围内不在this

var Component = function () {
        var _componentName = 'test';
        var _test = 'ts';
        return {
            getName: function(){
                console.log('getName() is called');
                console.log(_componentName);
                console.log(_test);
                return _componentName;
            }
        };
    };

    var Skip_button = function () {
        var skipBtn = Component();
        skipBtn._componentName = 'Skip_Btn';
        return skipBtn ;
    };

    var skipBtn = Skip_button();
    skipBtn.getName();

如果您运行上述代码,console.log(_componentName)将打印'test',因为它有一些值