关于原型模式创建class时的问题
发布于 6 年前 作者 starhiking 3090 次浏览 来自 问答

作业是用js实现树,第一反应就是先创建一个类, 但是遇到的问题是push没有被定义,也就是说childs没有识别成数组 想请问一下各位前辈 怎么修改 #Title 微信图片_20171030005120.png #Code 2.png #Error 3.png

11 回复

匿名函数拿不到自己的this

  1. 没有理解二叉搜索树这个数据结构到底是什么。
  2. 没有用 ES6 的 class 语法(不是箭头函数),箭头函数是不绑定 this 的,因为箭头函数是 FP 范式专用的,不要混用 FP 和 OOP 这两种不同的范式。

抛砖引玉 -> 答案慎点 还有问一下题目哪来的,出的不错。

@ianchn 外教出的题目

来自酷炫的 CNodeMD

@starhiking 箭头函数绑定了定义箭头函数所在作用域的上下文this,setChilds方法里面这个this固定成了全局的this

来自酷炫的 CNodeMD

function tree(){
  this.str="";
  this.childs=[];
}
tree.prototype.setChild = function(kid){
  this.childs.push(kid);
};

自有的属性不应该写到prototype里面的

@godghdai 感谢 刚才我将function改过来之后 三个对象的childs都指向同一个地址,把str和childs不放在prototype解决了问题 谢谢指点

@ianchn 数据结构没什么问题吧,因为不一定是二叉树,可能有很多子节点

这是没搞清楚箭头函数绑定的是那个作用域的this!我同事就经常干这事的orz

@starhiking 你问问你们外教吧,binary tree 是什么,只能说你把题目想的太简单了。你也可以把我的答案给外教看看有没有满分。(滑稽)

@ianchn 真看错了😂 没仔细看

知道重写原型需要手动指定constructor,居然不知道箭头函数会绑定外部作用于的this.还有不是所有属性都应该定义在prototype里的.

回到顶部