我是新来的,所以我希望我不违反任何规则......
我正在研究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时遇到了一些麻烦(格式化不起作用)所以这必须到期,但我确实有一些其他构造函数/创建函数用于“真实”函数(类)对象而不是记录(数据对象) ......有效 - 这些实现有点不同,支持深度继承......
答案 0 :(得分:0)
this
关键字指的是调用函数的范围。在您的示例中:
TMessage = TRecord({...});
将使用global
或window
对象作为其范围,或以严格模式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;
};