_protoype原型初识.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>_protoype原型</title>
<script type="text/javascript">
/*
* ? ? ?prototype的使用
?一:prototype的介紹
?? 功能:
?? ? ?返回對(duì)象原型的引用
?? 格式:
?? ? ?class.prototype
?? ?簡(jiǎn)單使用
?? ?function Person(name){
this.name=name;
}
//可以為Person類(lèi)下的所有對(duì)象添加一個(gè)'age'的屬性或者一個(gè)叫'eat'的函數(shù)
var p3 = new Person("小金");
Person.prototype.age=30;
Person.prototype.eat=function(){
console.log("吃飯");
return this.name+":"+this.age;
};
var p1 = new Person('小木');
?? ?var p2 = new Person("小火");
?? ? ?alert(p1.eat());
?? ? ?alert(p2.eat());
?? ? ?alert(p3.eat());
?? ?注意點(diǎn):
?? ? ?是Person.prototype.age=30;
?? ? ?不是Person.age=30;
Person.prototype.age=30;---->是為Person類(lèi)下的"對(duì)象"添加age屬性。對(duì)象.age
Person.age=30;------->是為Person類(lèi)添加屬性。是一個(gè)"靜態(tài)"屬性。 類(lèi).age
二:原理
當(dāng)程序加載Person函數(shù)時(shí),會(huì)為Person構(gòu)造器創(chuàng)建Person原型對(duì)象,它們是獨(dú)立存在的
。構(gòu)造器中有一個(gè)prototype屬性指向了原型對(duì)象,原型對(duì)象中有一個(gè)constructor屬性指向構(gòu)造器,當(dāng)Person類(lèi)的實(shí)例在使用一個(gè)不存在的屬性時(shí),會(huì)自動(dòng)到Person構(gòu)造器的原型對(duì)象中找。
?function Person(name){
this.name=name;
}
var p1 = new Person('小木');
?? ?console.log(p1.constructor);
?? ?console.log(Person.prototype.constructor);
?>>>p1.constructor:p1對(duì)象中沒(méi)有constructor屬性,所以會(huì)到Person構(gòu)造器的原型對(duì)象中去找,原型對(duì)象中的constructor指向了Person構(gòu)造器,所以最后返回了Person構(gòu)造器
注意:
??function Person(name){
this.name=name;
}
//可以為Person類(lèi)下的所有對(duì)象添加一個(gè)'age'的屬性或者一個(gè)叫'eat'的函數(shù)
var p3 = new Person("小金");
Person.prototype.age=30;
Person.prototype.eat=function(){
return this.name+":"+this.age;
};
var p1 = new Person('小木');
?? ?var p2 = new Person("小火");
?? ?p2.age=20; ? ? //------p2動(dòng)態(tài)添加了一個(gè)age屬性。?
?? ?alert(p1.age+":"+p2.age);
?? ?//p1.age----》自己中找不到,所以去原型對(duì)象中找---->30
?? ?//p2.age----》現(xiàn)在自己中找,找不到才去原型對(duì)象中找---->20
三:原型繼承:“所有類(lèi)的父類(lèi)都是object”,所有類(lèi)的實(shí)例對(duì)象的父類(lèi)是自己類(lèi)的原型對(duì)象;
?? ?console.log(p1.toString());
??p1對(duì)象中沒(méi)有toString()方法----->原型對(duì)象中也沒(méi)有toString方法---->object中有。
對(duì)象------>類(lèi)的原型對(duì)象------->object;
(Person.prototype) = new Object();
產(chǎn)生一個(gè)疑問(wèn)?
js中有重載和重寫(xiě)嗎?
java中重載:方法名相同,參數(shù)個(gè)數(shù)不同。(子類(lèi))
java中重寫(xiě):方法名,參數(shù)相同。方法實(shí)現(xiàn)改變。(子類(lèi))
function Person(name){
this.name=name;
}
這種叫做重寫(xiě)嗎??
Person.prototype.toString=function(){
console.log(this.name);
};
var p1 = new Person('小木');
?? ?p1.toString();
??
?? function Person(name){
this.name=name;
}
? 這種叫做重載嗎?
Person.prototype.toString=function(a,b){
console.log(this.name+a+b);
};
var p1 = new Person('小木');
?? ?p1.toString(2,3);
??四:原型鏈!!!!!!!!(重要)
?? 》》》先找自己---》類(lèi)的原型對(duì)象-----》object《《《《
function Person(name){
this.name=name;
}
Object.prototype.age=30;
Object.prototype.eat=function(){
alert("吃飯了");
}
var p1 = new Person('小木');
alert(p1.age);
p1.eat();
練習(xí)一:擴(kuò)展數(shù)組的功能:為每一個(gè)數(shù)組添加一個(gè)方法,可以查找某個(gè)元素所在的位置
Array.prototype.search=function(a){
var kaiguan = false;
for(var i=0;i<this.length;i++){
if(a==this[i]){
kaiguan=true;
}
}
return kaiguan? i :-1;
}
var arr=[0,1,2,3,4];
alert(arr.search(5));
練習(xí)二:擴(kuò)展數(shù)字類(lèi)的功能:
為每一個(gè)數(shù)字對(duì)象添加一個(gè)方法,該方法的參數(shù)為任意數(shù)目的整數(shù),然后將所有參數(shù)
累加到一起并返回。
?Number.prototype.max=function(){
?? var num=0;
? for(var i=0;i<arguments.length;i++){
? num+=arguments[i];
? }
? return num ?num :-1;
??}
??var a = new Number ();
??alert(a.max());
??alert(a.max(1,2,4,8,9));
??*/?
?
</script>
</head>
<body>
</body>
</html>
| 1 | <br> |
本文轉(zhuǎn)自 沉迷學(xué)習(xí)中 51CTO博客,原文鏈接:http://blog.51cto.com/12907581/1926867,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的_protoype原型初识.的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 系统快捷键被谁占用? 查看工具
- 下一篇: android唯一设备标识、设备号、设备