V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
guotie
V2EX  ›  JavaScript

请教一个 javascript extend 问题

  •  
  •   guotie · 2014-08-26 11:34:20 +08:00 · 3036 次点击
    这是一个创建于 3771 天前的主题,其中的信息可能已经有所发展或是发生改变。
    代码如下:

    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中
    4 条回复    2014-09-01 10:09:53 +08:00
    guotie
        1
    guotie  
    OP
       2014-08-26 11:42:58 +08:00
    上面的function noop的定义是这样的:
    function noop (){}

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

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

    noop.prototype === Function
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2826 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:06 · PVG 08:06 · LAX 16:06 · JFK 19:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.