放置继承,创建方法 - 内部或外部对象?

时间:2012-07-08 20:43:02

标签: javascript class inheritance prototype

我是新来的,所以我希望我不违反任何规则......

我正在研究JavaScript中的对象继承......并且正在为这件事找出“我的”规则......现在我已经遇到了“某种”问题......

这就是我喜欢做的事情:

我喜欢有一个方法(函数),它更像是我正在创建的对象的标识符,这个方法也是对象创建者...但是我也希望使用同一个对象来实例化“数据类型”对象创建(我猜代码解释得更多......这是我坚持的部分)

    TRecord = function() {
      this.Class = 'TRecord';
      F = function() {};
      F.prototype = arguments[0]; //args is an object (se below)
      return(new F());
    };

    TRecord.create = function(O) { // this method will not be executed as I like
        if(O) alert(O.Class);      // inside above object when define there with
        <new O object created and returned - code missing>
    };                             // this.create = function(){};
                                   // but if defined here it will, se below...

    TMessage = TRecord({
      'Class': 'TMessage',
      'msgID': Number(0),
      'data': Object('Hello')
    });

    aMSG = TRecord.create(TMessage); // the TMessage instance will be created
                                     // with the above method... and
    alert(aMSG.Class);               // will output TMessage...

为什么我不能在TRecord中实现TRecord.create函数?

... 我在发布整个source.js时遇到了一些麻烦(格式化不起作用)所以这必须到期,但我确实有一些其他构造函数/创建函数用于“真实”函数(类)对象而不是记录(数据对象) ......有效 - 这些实现有点不同,支持深度继承......

2 个答案:

答案 0 :(得分:0)

this关键字指的是调用函数的范围。在您的示例中:

TMessage = TRecord({...});

将使用globalwindow对象作为其范围,或以严格模式undefined调用TRecord。 this关键字仅引用构造函数内部的新对象,因为new关键字如何对新范围进行调用。

有关详细信息,请参阅https://developer.mozilla.org/en/JavaScript/Reference/Operators/this

答案 1 :(得分:0)

不完全确定你要做什么,但看起来TRecord应该是某种类工厂。尝试

TRecord = function() {
  var F = function() {};
  F.prototype = arguments[0];
  var result = new F();
  result.Class = 'TRecord';
  return result;
};