_protoype原型初识.
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>_protoype原型</title>
<script type="text/javascript">
/*
* ? ? ?prototype的使用
?一:prototype的介紹
?? 功能:
?? ? ?返回對象原型的引用
?? 格式:
?? ? ?class.prototype
?? ?簡單使用
?? ?function Person(name){
this.name=name;
}
//可以為Person類下的所有對象添加一個'age'的屬性或者一個叫'eat'的函數
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());
?? ?注意點:
?? ? ?是Person.prototype.age=30;
?? ? ?不是Person.age=30;
Person.prototype.age=30;---->是為Person類下的"對象"添加age屬性。對象.age
Person.age=30;------->是為Person類添加屬性。是一個"靜態"屬性。 類.age
二:原理
當程序加載Person函數時,會為Person構造器創建Person原型對象,它們是獨立存在的
。構造器中有一個prototype屬性指向了原型對象,原型對象中有一個constructor屬性指向構造器,當Person類的實例在使用一個不存在的屬性時,會自動到Person構造器的原型對象中找。
?function Person(name){
this.name=name;
}
var p1 = new Person('小木');
?? ?console.log(p1.constructor);
?? ?console.log(Person.prototype.constructor);
?>>>p1.constructor:p1對象中沒有constructor屬性,所以會到Person構造器的原型對象中去找,原型對象中的constructor指向了Person構造器,所以最后返回了Person構造器
注意:
??function Person(name){
this.name=name;
}
//可以為Person類下的所有對象添加一個'age'的屬性或者一個叫'eat'的函數
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動態添加了一個age屬性。?
?? ?alert(p1.age+":"+p2.age);
?? ?//p1.age----》自己中找不到,所以去原型對象中找---->30
?? ?//p2.age----》現在自己中找,找不到才去原型對象中找---->20
三:原型繼承:“所有類的父類都是object”,所有類的實例對象的父類是自己類的原型對象;
?? ?console.log(p1.toString());
??p1對象中沒有toString()方法----->原型對象中也沒有toString方法---->object中有。
對象------>類的原型對象------->object;
(Person.prototype) = new Object();
產生一個疑問?
js中有重載和重寫嗎?
java中重載:方法名相同,參數個數不同。(子類)
java中重寫:方法名,參數相同。方法實現改變。(子類)
function Person(name){
this.name=name;
}
這種叫做重寫嗎??
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);
??四:原型鏈!!!!!!!!(重要)
?? 》》》先找自己---》類的原型對象-----》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();
練習一:擴展數組的功能:為每一個數組添加一個方法,可以查找某個元素所在的位置
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));
練習二:擴展數字類的功能:
為每一個數字對象添加一個方法,該方法的參數為任意數目的整數,然后將所有參數
累加到一起并返回。
?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> |
本文轉自 沉迷學習中 51CTO博客,原文鏈接:http://blog.51cto.com/12907581/1926867,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的_protoype原型初识.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 系统快捷键被谁占用? 查看工具
- 下一篇: android唯一设备标识、设备号、设备