关于原型模式创建class时的问题
作业是用js实现树,第一反应就是先创建一个类, 但是遇到的问题是push没有被定义,也就是说childs没有识别成数组 想请问一下各位前辈 怎么修改 #Title #Code #Error
11 回复
匿名函数拿不到自己的this
- 没有理解二叉搜索树这个数据结构到底是什么。
- 没有用 ES6 的 class 语法(不是箭头函数),箭头函数是不绑定 this 的,因为箭头函数是 FP 范式专用的,不要混用 FP 和 OOP 这两种不同的范式。
抛砖引玉 -> 答案慎点 还有问一下题目哪来的,出的不错。
@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里的.