本帖最后由 mccissb 于 2013-03-15 21:19:16 编辑

解决方案 »

  1.   

    var stooge = {};
    stooge['first-name'] = 'Jerome';
    stooge['middle-name'] = 'Lester';
    var another_stooge = Object.beget(stooge);第一种写法,假如要得到first-name的值,用another_stooge['first-name'];第二种写法,假如要得到first-name的值,用another_stooge.prototype['first-name'];
      

  2.   

    经过一个上午的查找和测试,应该和原型链有关。
    通过楼主的第一个函数既 new F() 创建的对象,不存在 prototype 属性,而存在 __proto__ 属性;
    通过楼主所写的第二个函数创建的对象,存在 prototype 属性,而不存在 __proto__ 属性;仍在研究中...以下是我的测试代码://两种函数
    Object.cr= function(o) {
        var F = function() {};
        F.prototype = o;
        return new F();
    };
    Object.bt= function(o) {
        var newObject = {};
        newObject .prototype = o;
        return newObject ;
    };//创建原始对象
    var o = { x:"o_x", y:"o_y" };//通过三种不同方法创建新对象
    var o_de = o; 
    var o_cr = Object.cr(o);
    var o_bt = Object.bt(o);//改写原始对象属性
    o.x = "o.x2";
    o_bt.x= "o_bt";
    o_cr.x= "o_cr";//显示对象的属性和方法
    console.dir(o_de);
    console.dir(o_cr);
    console.dir(o_bt);