прототип вопроса в JavaScript - PullRequest
0 голосов
/ 23 марта 2011
<script type="text/javascript">

var Person =
{

    Create: function(name, age) {  
        this.name = name;
        this.age = age;
    },
    showMe: function() {
        return " Person   Name: " + this.name + "  Age: " + this.age + " ";
    }
}; 

function New(aClass, aParams) {
    function new_() { 
        aClass.Create.apply(this, aParams);  
    };
    new_.prototype = aClass;   
    var obj = new new_();  
    return obj;
}
</script>

Я не совсем понимаю код выше.Может ли кто-нибудь сказать мне, что означает человек, создать, показать, новый и новыйБольшое спасибо.

Ответы [ 2 ]

2 голосов
/ 23 марта 2011

Person - это объект с двумя функциями - Create и showMe.В JavaScript нет классов, только объекты, и именно так вы пишете объект - используя «Object Literal Notation» (фигурные скобки и функции / свойства, разделенные запятыми).

New isумная повторная реализация ключевого слова new.Вместо классов в javascript есть прототипы, и вместо создания экземпляра класса вы создаете копию прототипа.В этом случае, если вы передали Person в New(), он будет использоваться в качестве прототипа в new_.prototype = aClass, а остальная часть этой функции вернет объект с прототипом Person, что означает любые изменения в Person позже будет также унаследован в obj (если obj не переопределил их).

0 голосов
/ 23 марта 2011
`Person` -- a variable w/ 'parts' (used loosely) `Person.Create` and `Person.showMe'
     `Person.Create` -- function of `Person` that sets `Person.name` and `Person.age` to its arguments
     `Person.showMe` -- returns a string explaining values of `Person.name` and `Person.age`

`New` -- a function intended to instantiate new Person's thru prototypal (this is NOT class based) inheritenced
  `New._new` -- `New` uses this to get it done

В основном через прототип наследования, хотя Person создается только один раз, другие его версии могут быть сконструированы в натуральной форме. Его можно использовать так (попробуйте здесь: http://jsfiddle.net/PBhCs/)

var Person =    {            
    Create: function(name, age) 
    {              
        this.name = name;            
        this.age = age
    },        

    showMe: function() 
    {            
        return " Person   Name: " + this.name + "  Age: " + this.age + " ";        
    }    
};         


function New(aClass, aParams) 
{        
    function new_() 
    {             
        aClass.Create.apply(this, aParams);          
    };
    new_.prototype = aClass;
    var obj = new new_();          
    return obj;    
}   

var a = New(Person, ['moo', 5]);
var b = New(Person, ['arf', 10]);
alert(a.showMe() + b.showMe());
...