2014-01-25 4 views
0
<html> 
<body> 
<div id="output"></div> 

<script> 
    function jExgTrend(){ 

    } 

    jExgTrend.prototype.Start = function(text) 
    { 
     //this must return Instance name : "TestObj" 
     var InstanceName = "TestObj"; 

     document.getElementById("output").innerHTML = "<a href=\"javascript:"+InstanceName+".Notify('"+text+"');\">"+text+"</a>"; 

    } 

    jExgTrend.prototype.Notify = function(msg) 
    { 
     alert(msg); 
    } 

    var TestObj = new jExgTrend(); 
    TestObj.Start("Text of the link"); 

</script> 


</body> 
</html> 

Как я могу сделать что-то подобное? метод «Пуск» должен вернуть имя экземпляра класса.Javascript: имя экземпляра в методе класса

Проблема глупо я знаю :-(

+0

Возможный дубликат [Как получить имя экземпляра объекта] (http://stackoverflow.com/questions/2460868/how-to-get-the-instance-name-of-an-object) –

ответ

0

Вы не можете Вы можете указать имя в конкретизации, хотя:.

function JExgTrend(name){ this.name = name || 'no name specified'; } 
JExgTrend.prototype.Start = function() { 
           alert(this.name); 
          } 

var testObj = new JExgTrend('testObj'); 
var otherTestObj = new JExgTrend('otherTestObj'); 
var anon = new JExgTrend; 
testObj.Start();  //=> testObj 
otherTestObj.Start(); //=> otherTestObj 
anon.Start();   //=> no name specified 

Несколько экзотическая альтернатива: Вы можете запрограммировать конструктор, как это :

function JExgTrend(name,scope) { 
    name = name || (Math.floor(10000+Math.random()*100000000000)).toString(16); 
    if (!(this instanceof JExgTrend)) { 
    return new JExgTrend(name,scope); 
    } 
    this.name = name; 
    if (!JExgTrend.prototype.myname) { 
    JExgTrend.prototype.myname = function(){ console.log(this.name); }; 
    } 
    return (scope || window)[this.name] = this; 
} 

А затем присвоить объекты, как это:

jExgTrend.call(null, 'testObj'); 
testObj.myname(); //=> testObj 

Попробуйте пустячный вокруг @this jsFiddle

+0

это это решение, которое я уже использовал ... но мне он не нравится :-( – epasinetti

+0

http://jsfiddle.net/VgsgD/ это код ... вы можете мне помочь? – epasinetti

+0

@epasinetti: добавлен jsFiddle ссылка в ответе – KooiInc

0

Может быть, что вам действительно нужно, это идентификатор, а не имя.
Предоставление идентификатор является то, что вы можете легко добавить с помощью метода, который вы можете добавить в прототип объекта или просто класс (ов), которые Вас интересуют:

var idGetter = (function() { 
     var currentId = 0; 
     return function() { 
       // 1. replace 'id' with a readonly property 
       //  that will return id for this object 
       var thisId = currentId ; 
       Object.defineProperty(this, 'id', 
         { get : function() { return thisId; } }) ; 
       // 2. for the first run of id, return object id 
       return currentId++; 
     } 
}()); 

Object.defineProperty(Object.prototype, 'id', { get : idGetter }); 

небольшой пример использования:

var someObject = {}; 
console.log(someObject.id); // outputs 0 

var someObject2 = {}; 
console.log(someObject2.id); // outputs 1 

Обратите внимание, что Object.defineProperty по умолчанию использует неперечислимое свойство, поэтому ваши объекты не будут «загрязнены» этим свойством (при использовании, например, для ..).

+0

извините, но я не понимаю, что ваш код мог мне помочь – epasinetti

+0

«Возможно, вам действительно нужен идентификатор, а не имя». Этот код добавит свойство «id» ко всем объектам, которые будут идентифицировать с уникальным номером каждого объекта. Это зависит от того, что вы планируете делать с именем/идентификатором объекта. Если это не полезно, я просто удалю ответ. – GameAlchemist

+0

http://jsfiddle.net/VgsgD/ это что мне нужно сделать – epasinetti

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