请教一个 javascript extend 问题

2014-08-26 11:34:20 +08:00
 guotie
代码如下:

function noop() {
this.name = 'this.name'
}
function _extend(source, obj) {
for (var prop in source) {
if(!obj.prototype[prop]) {
obj.prototype[prop] = source[prop]
}
}
return obj
}

noop.prototype["name"] = 'noop'

_extend({"title":"sometitle"}, noop)

var n = new noop()
console.log( noop.name, noop.title, noop.prototype.name, noop.prototype.title, noop.prototype)
console.log( n.name, n.title)

输出结果如下:
noop undefined noop sometitle { name: 'noop', title: 'sometitle' }
'name' 'sometitle'

问题是:
为什么noop.name可以取到值,而noop.title无法取到值,而name和title都在noop.prototype中
2911 次点击
所在节点    JavaScript
4 条回复
guotie
2014-08-26 11:42:58 +08:00
上面的function noop的定义是这样的:
function noop (){}

jsbin在线调试地址:
http://jsbin.com/jihijinurutu/1/edit?js,console
larvata
2014-08-26 12:23:14 +08:00
你取到的 noop.name不是noop.prototype里定义的name
而是function noop() 的名字
guotie
2014-08-26 12:48:16 +08:00
原来如此!

多谢!
rekey
2014-09-01 10:09:53 +08:00
noop.title 取不到值是因为

noop.prototype === Function

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/129938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX