簡體   English   中英

javascript中的原型問題

[英]a prototype question in javascript

<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_的含義嗎? 非常感謝。

Person是一個具有兩個函數的對象 - CreateshowMe 在JavaScript中,沒有類,只有對象,這就是你編寫對象的方式 - 使用'Object Literal Notation'(用逗號分隔的花括號和函數/屬性)。

New是對new關鍵字的巧妙重新實現。 javascript沒有類,而是有原型,而不是創建類的實例,而是創建原型的副本。 在這種情況下,如果您將Person傳遞給New() ,它將用作new_.prototype = aClass的原型,並且此函數的其余部分將返回帶有Person原型的對象,這意味着稍后對Person任何更改都將也被繼承到obj中(除非obj已經覆蓋了它們)。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM