0

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

正是因为如此,我正在研究 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 时遇到了一些麻烦(格式不起作用)所以这将不得不到期,但是我确实有一些其他构造函数/创建函数用于“真实”函数(类)对象而不是记录(数据对象)......有效 - 这些实现有点不同,支持深度继承......

4

2 回答 2

0

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

TMessage = TRecord({...});

TRecord 将使用globalorwindow对象作为其范围调用,或者在严格模式下调用undefined. this关键字仅指构造函数内部的新对象,因为关键字如何将调用new与新范围绑定在一起。

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

于 2012-07-08T20:54:14.847 回答
0

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

TRecord = function() {
  var F = function() {};
  F.prototype = arguments[0];
  var result = new F();
  result.Class = 'TRecord';
  return result;
};
于 2012-07-08T20:55:37.170 回答