javascript中的原型问题

时间:2011-03-23 05:37:40

标签: javascript prototype

<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>

我不太明白上面的代码。有人能告诉我Person,Create,showMe,New和new_的含义吗?非常感谢。

2 个答案:

答案 0 :(得分:2)

Person是一个包含两个函数的对象 - CreateshowMe。在JavaScript中,没有类,只有对象,这就是你编写对象的方式 - 使用'Object Literal Notation'(用逗号分隔的花括号和函数/属性)。

New是对new关键字的巧妙重新实施。 javascript没有类,而是有原型,而不是创建类的实例,而是创建原型的副本。在这种情况下,如果您将Person传递给New(),它将用作new_.prototype = aClass中的原型,此函数的其余部分将返回带有Person原型的对象,这意味着稍后对Person的任何更改也会继承到obj(除非obj已覆盖它们)。

答案 1 :(得分:0)

`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());