您的位置:首页 > Web前端 > JavaScript

javaScript 面向对象-原形prototype

2014-01-30 12:45 274 查看
* 原型:非常重要

* 定义:原型就是函数对象的一个属性

* 作用:

* 利用原型,为函数对象增加属性和方法:

* 函数对象.原型.属性名 = 属性值;函数对象.原型.方法名 = function(){}

* 函数对象.原型 = {属性名:属性值,方法名:function(){}}

先增加属性和方法,再new对象

* 这种增加属性和方法的方式,并不是真正地增加到函数对象自身

* 当原型属性与自身属性同名时:

* 自身属性就覆盖了原型属性。可以不可以这样说?

* 真正地:自身属性与原型属性同时存在,自身属性的优先级要高于原型属性

* 利用自身属性重写原型属性

* 扩展内建对象

原型的作用

<script type="text/javascript">
function Hero(){
this.name = "javascript";
this.sayMe = function(){
alert("javascript");
}
}

// var hero = new Hero();

//利用原型属性,为函数对象增加属性和方法

//函数对象.原型.属性名 = 属性值
Hero.prototype.value = "HERO";

var hero = new Hero();

alert(hero.value);

// Hero.prototype.sayHero = function(){
// alert("HERO");
// }
//
// hero.sayHero();

/*
* * 先new对象,再增加属性和方法:无效
* * 先增加属性和方法,再new对象:有效
*/
// Hero.prototype = {
// value : "HERO",
// sayHero : function(){
// alert("HERO");
// }
// }
//
// var hero = new Hero();

alert(hero.value);

</script>

原型属性与自身属性同名

<script type="text/javascript">
// function Hero(){
// this.name = "javascript";
// }
//
// Hero.prototype.name = "jscript";
//
// var hero = new Hero();
//
//// alert(hero.name); //output javascript
//
// delete hero.name;
//
// alert(hero.name); //output

//定义空的函数对象
function Hero(){}

Hero.prototype.name = "javascript";

var hero = new Hero();

hero.name = "jscript";

alert(hero.name); //output javascript

delete hero.name;

</script>

扩展内建对象

<script type="text/javascript">
//为原型 Array对象增加一个判断的函数
Array.prototype.inArray = function(color){
//this指代Array对象
for(var i = 0, len = this.length; i < len; i++){
if(this[i] === color){
return true;
}
}
return false;
}

//定义一个Array对象
var a = ["red", "green", "blue"];

//测试
alert(a.inArray("red")); //true
alert(a.inArray("yellow")); //false

/*
* * javascript的内建对象,提供很多属性和方法
* * 不能满足所有的需求,所以自定义属性或方法
* * 通过原型,将自定义的方法,添加到了内建对象上
* * 可以调用自定义方法,像内建对象原生方法一样
*/

</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: