2014-11-19 3 views
0

я следующий код в отдельном файле, на который ссылается с тегамиКак создать объект с помощью object.create?

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. Что я здесь делаю неправильно? Это тестирование в Firefox 12.0 на Mac OSX, и я не уверен, какую версию javascript он использует. Я Использование O'Reillies Javascript: The Definitive Guide (носорог книгу), чтобы увеличить свои знания объектов и связанных с ними код

Edit: Я понял это:

он работает с

var tst2 = Object.create(tst); 

ответ

0

Ваш код не добавил никаких свойств к _TEST.prototype. Функция _TEST добавляет свойства непосредственно к каждому экземпляру, созданному при вызове new _TEST(). Это не имеет ничего общего с прототипом.

Смежные вопросы