一段JavaScript代码,看不懂

li648918708 2018-04-04 02:17:36
var create = Object.create || (function() {
function F() {};
return function(obj) {
var subtype;
F.prototype = obj;
subtype = new F();
F.prototype = null;
return subtype
}
} ());

返回的 subtype 中的 prototype 到底是空还是obj?

语法如此,还是写代码的人乱搞?有没有快速语法扫盲书籍??
...全文
508 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2018-04-04
  • 打赏
  • 举报
回复
F.prototype = obj; subtype = new F(); 这两行代码的作用是,让 subtype 指向一个F新创建的对象,这个新对象的 __proto__指向obj。 也就是类似 subtype = {}; subtype.__proto__ = obj 在这之后 subtype 与 F() 就没有什么的关联了, F.prototype = null; 只是让 F 与 obj 断开联系,不让F占用对obj的引用计数,不写这行也没关系。
75闪光雷 2018-04-04
  • 打赏
  • 举报
回复
引用 4 楼 li648918708 的回复:
F是一个局部函数,不清空也可以吧?下次返回subtype.prototype又是另外一个obj。
你可以试试不清空,有什么不一样,有句话:存在即合理。 有的代码你看这没用 ,没了它程序就是不能跑。 至于第二个,你的返回值跟入参有关吧,入参不一样,结果当然不一样了
li648918708 2018-04-04
  • 打赏
  • 举报
回复
引用 3 楼 qq_34309305 的回复:
[quote=引用 2 楼 li648918708 的回复:] [quote=引用 1 楼 qq_34309305 的回复:] F.prototype = obj; subtype = new F(); F.prototype = null; return subtype 上面这段代码, 先把 F.prototype赋值为obj,传给subtype,然后把 F.prototype赋值为空, 所以subtype.prototype 我认为是 obj
F.prototype = null; 有什么作用呢?[/quote] 把 F.prototype清空, 这样这个方法执行完毕, F.prototype就没变过, subtype.prototype变成了obj。 外面的人不知道subtype.prototype是通过F.prototype来间接得到的, (当然以上纯为本人推理,毕竟没看到所有代码)[/quote] F是一个局部函数,不清空也可以吧?下次返回subtype.prototype又是另外一个obj。
75闪光雷 2018-04-04
  • 打赏
  • 举报
回复
引用 2 楼 li648918708 的回复:
[quote=引用 1 楼 qq_34309305 的回复:] F.prototype = obj; subtype = new F(); F.prototype = null; return subtype 上面这段代码, 先把 F.prototype赋值为obj,传给subtype,然后把 F.prototype赋值为空, 所以subtype.prototype 我认为是 obj
F.prototype = null; 有什么作用呢?[/quote] 把 F.prototype清空, 这样这个方法执行完毕, F.prototype就没变过, subtype.prototype变成了obj。 外面的人不知道subtype.prototype是通过F.prototype来间接得到的, (当然以上纯为本人推理,毕竟没看到所有代码)
75闪光雷 2018-04-04
  • 打赏
  • 举报
回复
F.prototype = obj; subtype = new F(); F.prototype = null; return subtype 上面这段代码, 先把 F.prototype赋值为obj,传给subtype,然后把 F.prototype赋值为空, 所以subtype.prototype 我认为是 obj
li648918708 2018-04-04
  • 打赏
  • 举报
回复
引用 1 楼 qq_34309305 的回复:
F.prototype = obj; subtype = new F(); F.prototype = null; return subtype 上面这段代码, 先把 F.prototype赋值为obj,传给subtype,然后把 F.prototype赋值为空, 所以subtype.prototype 我认为是 obj
F.prototype = null; 有什么作用呢?

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧