【问题标题】:Inherit properites in javascript "object"继承javascript“对象”中的属性
【发布时间】:2013-06-15 10:56:19
【问题描述】:

各位,能不能帮我解答一下这个问题。

var Module = function ( options ) {
var settings = {
    selector: 'body',
    declaration: function () {
        return{
            init: function () {
                console.log( 'nodule initialize' );
            },
            destroy: function () {
                console.log( ' module destroyed' );
            }
        }
     }
   };
this.declaration = options.declaration || settings.declaration;
this.selector = options.selector || settings.selector;
};

var Registration = function ( options ) {
   this.selector = options.selector || **strong text**;
   this.declaration = options.declaration
}
app.utils.extend( Module, Registration );
var m_registration = new Registration( {
   declaration: function ( f ) {
      return {
        init: function () {
        },
        destroy: function () {
        }
    }
  }
} );

我的主要问题是,如果我们在创建 Registration 实例时不需要传递数量参数,我如何继承 m_registration 中的 Module.selector 属性 p>

我的函数app.utils.extend()的实现:

var app.utils.extend = function ( from, to ) {
        var F = function () {
        };
        F.prototype = from.prototype;
        to.prototype = new F();
        to.prototype.constructor = to;
        to.superclass = from.prototype;
    }

更新

如果我们使用这些方法:

var Registration = function ( options ) {
       Module.call(this, { selector : options.selector });
       this.declaration = options.declaration
}

如果我们真的不知道这个类从哪个实例扩展或继承,我们如何使用继承。

【问题讨论】:

  • 也许这些变种很好var Registration = function ( options ) { this.selector = options.selector || this.superclass.selector; this.declaration = options.declaration }
  • 您不能定义名称中带有点的变量!你必须做var app = {}; app.utils = {}; app.utils.extend = function() {...};
  • @LightStyle:或var app = { utils: { extend: function() { ... } } };
  • @LightStyle:我之前意识到了,但我没有在问题中显示这部分代码
  • @T.J.Crowder 是的,也许他想添加更多属性并在嵌套对象中定义它们可能会很痛苦:P @DmitriyFilipenko 如果对象是在之前定义的,无论如何你必须不放var声明前的关键字!

标签: javascript class oop prototype


【解决方案1】:
var Registration = function ( options ) {
   Module.call(this, { selector : options.selector || **strong text**});
   this.declaration = options.declaration
}

我不知道**strong text** 在您的情况下是什么意思。但是如果你这样称呼它

var Registration = function ( options ) {
       Module.call(this, { selector : options.selector });
       this.declaration = options.declaration
    }

或者

var Registration = function ( options ) {
       Module.call(this, options );
       this.declaration = options.declaration
    }

在您的情况下,m_registration.selector 将是 'body'

【讨论】:

  • 好的,谢谢。在我问了这个问题之后,我就是这样想的。这就是我要的。还有一个。我们可以扩展这些方法吗?如果我们真的不知道这个类从什么扩展或继承。
【解决方案2】:
var Module = function ( options ) {
    this.declaration = options.declaration;
    this.selector = options.selector;
}

Module.prototype = {
    selector: 'body',
    declaration: function () {
        return{
            init: function () {
                console.log( 'nodule initialize' );
            },
            destroy: function () {
                console.log( ' module destroyed' );
            }
        }
     }
   };

另一种方法是将要继承的所有属性放入prototype 属性。这就是javascript引擎处理继承的方式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多