首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • mozilla 关于 javascript中new 的解释错了吧? [已结贴,结贴人:jyk1970]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 00:31:55 楼主
    http://developer.mozilla.org/cn/docs/A_re-introduction_to_JavaScript
    中有如下一段话,我感觉其描述与实际不符,谁来帮我分析一下:
    “我们引入了另外一个关键字:'new',它和'this'密切相关。它的作用是创建一个崭新的空对象,然后使用指向那个对象的'this'调用制定的函数。被'new'调用的函数成为构造函数”

    举例:
    var A=function()
    {
    this.B="this.B"
    }
    A.C="A.C";

    function D()
    {
    this.E="this.E";
    return A;
    }

    var X=new D();
    //这个new并没有创建一个D的崭新的空对象,然后再调用构造函数吧?
    //难道D的崭新的空对象创建之后立即又丢失了?

    100  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 00:37:241楼 得分:0
    是你自己误解了吧
    描述与实际一样啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 00:42:202楼 得分:0
    var X=new D();
    X 并没有得到D的实例对象!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 00:54:333楼 得分:0
    JScript code
    function aa() { aa.prototype.action = function () { alert("原来的动作"); } } aa.prototype.originalAction = aa.prototype.action; aa.prototype.action =new function() { alert("新动作"); } var temp = new aa(); temp.action();


    JScript code
    function aa() { aa.prototype.action = function () { alert("原来的动作"); } } aa.prototype.originalAction = aa.prototype.action; aa.prototype.action =new function() { alert("新动作"); } var temp = aa(); temp.action();


    看看区别
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 00:56:134楼 得分:0
    你自己了解错误而已
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 00:57:165楼 得分:50
    然后你再看这个:

    JScript code
    function aa() { aa.prototype.action = function () { alert("原来的动作"); } } aa.prototype.originalAction = aa.prototype.action; aa.prototype.action =function() { alert("新动作"); } var temp = new aa(); temp.action();
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • muxrwc
    • 等级:
    发表于:2008-07-09 13:02:516楼 得分:50
    JScript code
    //难道D的崭新的空对象创建之后立即又丢失了? 是。。。 因为return返回,对象类型。。。生效了。 new关键字 修饰的“构造函数”里的return一些类型会无视(比如说string,number等) 而function array object等会生效。。。 是说 a = new function () { return {}; } 和 a = function () { return {} } a的值效果是一样的 不过前者new通过Object构造函数,来创建了空对象,而后因return 了对象,而没有return那个被new调用Object构造的对象。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 13:36:247楼 得分:0
    可以根据abstract factory pattern模式去理解js new
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tantaiyizu
    • 等级:
    发表于:2008-07-09 13:46:408楼 得分:0
    不要这么死板
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-07-09 22:21:019楼 得分:0
    var A=function()
    {
    this.B="this.B"
    }
    A.C="A.C";

    var T;

    function D()
    {
    T=this;
    this.E="this.E";
    return A;
    }

    var X=new D();
    通过var T 证实:D的崭新的空对象确实创建了!
    另外真的无视string, number, bool 类型
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • tantaiyizu
    • 等级:
    发表于:2008-07-10 09:07:3410楼 得分:0
    g
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved