继承构造逻辑,但在创建 Sub 对象时运行超级构造函数
Inherit construction logic, but run Super constructor on Sub object creation
我用其他语言写过东西,你继承了一个类,当创建子类的对象时,超类构造函数被调用。 但是,在我发现从javascript继承到处都是的模式中,超级构造函数实际上是在建立继承时运行的。
例:
var thingy = function(){ this.constructionTime = new Date() };
var thing2 = function(){ this.type="thing2" };
thing2.prototype = new thingy();//thingy constructor actually runs here
var t2 = new thing2();//does NOT call thingy constructor
setTimeout(function(){
var t3 = new thing2();
t3.constructionTime == t2.constructionTime; // TRUE
},100);
然后我发现了一些不太常见的例子,他们做了这样的事情:
var athing = function(){
this.constructionDate = new Date();
}
athing.prototype.showDate = function(){ console.log(this.constructionDate) };
var something = function(){
athing.apply(this);
this.note = "I'm something";
}
var x = new something();
然后调用 x = new something() 确实运行构造函数,但不继承方法。 所以我补充
something.prototype = athing.prototype;
它不给 x 方法,而是给新对象
y = new something();
y.showDate();//shows the date generated during its construction
确实有他们。
所以这是我可能过于宽泛的问题:我错过了什么吗? 除了希望您的超级构造函数只运行一次之外,是否有理由不使用此模式?
当你想要子类化时,请考虑使用
function Constructor() {
SuperConstructor.apply(this);
/* ... */
}
Constructor.prototype = Object.create(SuperConstructor.prototype);
Object.defineProperty(Constructor.prototype, 'constructor', {
value: Constructor,
configurable: true,
writable: true
});
- 在
Constructor
中调用SuperConstructor
会使Constructor
实例具有在SuperConstructor
内部设置的属性。 - 将
Constructor.prototype
设置为Object.create(SuperConstructor.prototype)
会使Constructor
实例从SuperConstructor.prototype
继承属性。 - 由于
Constructor.prototype
已被替换,因此必须手动添加constructor
属性。使用defineProperty
以使其不可枚举。
Javascript是一种无类语言。 尝试将继承和超级构造函数等经典概念硬塞进去并不是一个好主意。
相关文章:
- 引用对象中的通用值
- jQuery匹配JSON对象的部分文本
- 节点导出返回一个空对象
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 全局变量和全局对象的属性之间有什么区别吗
- 比较从函数和生成的日期对象
- Javascript,访问一个主要对象模块模式中的每个对象
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何使用json将对象列表从java转换为javascript
- 序列化数据属性中对象的最可靠方法
- 如何访问声音管理器2创建的声音对象
- 使用 JQuery 将表单解析为 JSON 对象,并考虑 sub – JSON 对象
- 继承构造逻辑,但在创建 Sub 对象时运行超级构造函数
- Javascript pub/sub 实现适用于函数,但不适用于对象的方法
- 如何使用格式化字符串访问JavaScript对象中的SUB属性
- 克隆“sub-array"对象数组(其中对象是深度嵌套的)的