Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么会出现此错误:未捕获类型错误:this.createLink不是位于<;的新链接处的函数;匿名>;1:9?_Javascript_Jquery_Dom - Fatal编程技术网

Javascript 为什么会出现此错误:未捕获类型错误:this.createLink不是位于<;的新链接处的函数;匿名>;1:9?

Javascript 为什么会出现此错误:未捕获类型错误:this.createLink不是位于<;的新链接处的函数;匿名>;1:9?,javascript,jquery,dom,Javascript,Jquery,Dom,我得到以下错误:未捕获类型错误:this.createLink不是函数 在JavaScript的新链接中,段落类工作得非常好 class Paragraph { constructor(text) { this.text = text; return this.createParagraph(); } createParagraph() { var paragraph = document.createElement('p'); paragraph.appendChild(doc

我得到以下错误:未捕获类型错误:this.createLink不是函数 在JavaScript的新链接中,段落类工作得非常好

class Paragraph {
constructor(text) {
  this.text = text;
  return this.createParagraph();
}
createParagraph() {
  var paragraph = document.createElement('p');
  paragraph.appendChild(document.createTextNode(this.text));
  return paragraph;
    }
}

class Link extends Paragraph {
constructor(text, link) {
    super(text);
    this.link = link;
    return this.createLink();
}
createLink() {
    var aLink = document.createElement('a');
    aLink.appendChild(document.createTextNode(this.text));
    aLink.href = this.link;
    return aLink;
    }
}

我试图执行以下命令:var a=newlink(“Text”,“google.com”);作为测试。

因此,您遇到此问题的原因是构造函数的一个奇怪属性

此代码:

constructor(text) {
    this.text = text;
    return this.createParagraph();
}
使链接构造函数中的“this”实际上是
createparation
的结果

老实说,我不知道为什么父构造函数会这样做,但是从两个构造函数中删除“return”应该不会导致这个错误

通常,构造函数不需要返回任何内容,您正在创建的实例默认情况下是从
new
操作符“返回”的链接中的code>构造函数调用
段落
类的
构造函数
。正在创建
段落
的新实例,但不是返回该实例,而是返回
createparation()
方法中的值

所以JavaScript试图基于一个与预期不同的值创建一个扩展类,但失败了。但是请记住,JavaScript类实际上不是类,而是在使用原型创建函数时的抽象层

但奇怪的是,用常规函数声明(旧的skool方式)重建它似乎确实可以让它工作。我对此感到困惑

功能段落(文本){
this.text=文本;
返回此.create段落();
}
paragration.prototype.createparagration=函数(){
var段落=document.createElement('p');
段落.appendChild(document.createTextNode(this.text));
返回段;
}
功能链接(文本、链接){
段落.调用(本,文本);
this.link=link;
返回这个.createLink();
}
Link.prototype=Object.create(段落.prototype);
Link.prototype.constructor=Link;
Link.prototype.createLink=函数(){
var aLink=document.createElement('a');
appendChild(document.createTextNode(this.text));
aLink.href=this.link;
返回aLink;
}
var link=新链接('hello','http://google.com');

控制台日志(链接)并且在一些测试之后,如果返回的是对象,而不是字符串,则构造函数似乎会这样做。约翰,你想达到什么目的?一个有链接和段落的dom,像什么