gpt4 book ai didi

Javascript,原型(prototype)不继承

转载 作者:行者123 更新时间:2023-12-02 14:50:39 26 4
gpt4 key购买 nike

在 Mozilla 开发者网络的帮助下,我开始在 Javascript 中使用原型(prototype)。

我的问题是我有两种类型:FieldTextField,它继承了Field。我想从 TextField 创建一个对象并调用继承的方法 writeForm。代码如下:

/**
* abstract type .
* Sets a parameter of the funcard associated with the html field. name => value
*/
function Field(){
console.log('create Field');
this.name = null;
this.value = null;
};
Field.prototype = {
/**
* Write the html Field in the field of the same name .
* This function must be overridden in each new type of Field.
*/
writeForm: function(){
// Function overloading
console.log('writeForm');
}
};


/**
* type text input
*/
function TextField(){
Field.call(this);
console.log('create TextField');
};
TextField.prototype = Object.create(Field.prototype, {
//Override
writeForm: function(){
Field.prototype.writeForm.apply(this, arguments);
// Function overloading
console.log('writeForm TextField');
}
});



var myfield = Object.create(TextField);
myfield.writeForm();

但是最后一行给了我一个Uncaught TypeError: myfield.writeForm is not a function。我真的不明白为什么它找不到我的方法。

你能帮我吗?

谢谢!

最佳答案

首先,您需要使用以下任一方法实例化 TextField 实例:

Object.create(TextField.prototype);
new TextField();

我建议使用 new TextField() 因为您已经定义了构造函数。

接下来,second parameter to Object.create接受一组属性描述符,这与直接将属性分配给对象不同。要了解属性描述符的工作原理,请查看 Object.defineProperties 。相反,您需要在创建 Field.prototype 实例后将函数直接分配给原型(prototype)。

TextField.prototype = Object.create(Field.prototype);
TextField.prototype.writeForm = function() {
Field.prototype.writeForm.apply(this, arguments);
// Fonction à surcharger
console.log('writeForm TextField');
};

关于Javascript,原型(prototype)不继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36209382/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com