[英]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
是一個具有兩個函數的對象 - Create
和showMe
。 在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.