如何使用object.create创建对象?

时间:2014-11-19 04:41:31

标签: javascript

我在使用标记

引用的单独文件中包含以下代码
function _TEST()
     {
      var val; 
      this.get = function(x)
           {
            return val;
           }

      this.prop = 'testing';

      this.set = function(x)
           {
            val = x
            return val;
           }

      this.exp = function(x)
          {
            function meth(x)
               {
                return 'I am a private '+x;
               }
           return meth(x);
          }
     }

现在在主页的头部我有

var tst = new _TEST();
window.onload = function()
   {
    tst.set('Hello')
    alert(tst.get());
    var tst2 = Object.create(_TEST.prototype);
        tst2.prop = "testing"; // the only property that shows up for tst2 below

    var str = '';

    for(var x in tst)
      {
       str += x+" : "+tst[x]+"\n";
      }
    str += "\n\ntst2:\n"
    for(var x in tst2)
      {
       str += x+" : "+tst2[x]+"\n";
      }
    alert(str)
   }

来自警报的调用输出是:

get : function (x) {
return val;
 }
 prop : testing
 set : function (x) {
   val = x;
   return val;
}
exp : function (x) {

function meth(x) {
    return "I am a private " + x;
}

return meth(x);
}


tst2:
prop : testing

据我了解,Object.create假设创建一个继承自原型的对象instande。 但是tst2没有那些。我在这做错了什么? 这是在Mac OSX上的Firefox 12.0中测试的,我不确定它使用的是哪个版本的javascript。我是 使用O'Reillies Javascript:权威指南(rhino book)来增加我对象和相关的知识 代码

编辑: 我弄清楚了:

适用于

var tst2 = Object.create(tst);

1 个答案:

答案 0 :(得分:0)

您的代码尚未向_TEST.prototype添加任何属性。 _TEST函数将属​​性直接添加到进行new _TEST()调用时创建的每个实例。这与原型无关。