javascript - 为什么很少看到人用 __proto__ 直接来实现面向对象?
天蓬老师
天蓬老师 2017-04-10 14:24:56
0
4
476

为了证明这种方式是可以用的, 我尝试写了个模块:
https://github.com/jiyinyiyong/proto-scope

human = proto.as
  init: -> @name = 'human race'
  give_name: (@name) ->
  introduce: -> console.log "this is #{@name}"

tom = human.new()
tom.introduce() # => "this is human race"

man = human.as
  speak: ->
    print 'speaks by', @name
dan = man.new()
dan.give_name 'Dan'
dan.introduce() # => "this is Dan"
dan.speak() # => "speaks by Dan"

从功能上说, proto 是可行的, 在 Node 环境里也是正常能跑的,
但是为什么没人在实际使用当中这样用呢?

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

모든 응답(4)
阿神

https://developer.mozilla.org/zh-CN/docs/JavaScript/Reference/Global_Objects/Object/proto

红色区三个大字……

Ty80

标准的可以用Object.getPrototypeOfObject.create 来做

问题是,不是可以用的东西就会被用……你需要回答的是“为什么这么做” 因为就你贴代码的那样子的能力,完全不用__proto__或者getPrototypeOf也一样能办到

巴扎黑

因为__proto__是prototype在实例上的副本,定义在prototype上的方法能够继承给所有实例,而__proto__只能影响到指定的实例

如果要对单个实例添加方法,直接obj.fn = function() {},比__proto__来得更简单直接,而且还节约了在原型链上的遍历(其实微不足道)

定义到__proto__的确可以工作,但并没有什么好处,当然就没人爱这么干

UPDATE:

我写了段代码测试,我的第一个观点是错误的,__proto__是prototype的直接引用,两者是一致的

那么我的第二个观点也不那么站得住脚……

@TooBug的答案看来更靠谱一点

另外,我认为即使不考虑__proto__非标准的因素,对prototype修改的方式会比修改__proto__更易读和维护

左手右手慢动作

可以阅读下 @nightire 凡哥的博文 - 《理解 JavaScript(四)》,里面详细介绍了 prototype__proto__ 以及原型继承等相关问题。

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿