JavaScript的原型

原型prototype属性仅仅适用于函数对象(这里的函数对象是自己为了理解更好定义的,普通对象是没有原型属性的)

1.研究函数原型:

<script type="text/javascript">
//原型是函数对象的一个属性(普通对象是没有原型属性的.).
function Person(){
this.name="李卫康";
this.sayHi=function(){
alert("Hi");
}
};
//调用函数对象Hero的属性和方法:new Hero()
var p=new Person();
//调用函数对象Hero的属性或方法时,实际上调用new之后的hero对象.
alert(p.name);
//调用函数对象的原型属性,是应该调用Hero对象还是hero对象呢? alert(Person.prototype); </script>

javascript中没有类的概念。仅仅有对象的概念.那么原型属性是定义在函数对象(相当于Java中的类)中,还是new的对象中呢.普通情况下我们研究是JavaScript的函数对象中的原型.

2.函数对象中添加属性和方法的方式(分散式和集中式)

定义函数对象:

function Person(){
this.name="李卫康";
this.sayMe=function(){
alert("Hi");
}
}

(1)分散式定义属性和方法:

Person.prototype.value="是头猪";

Person.prototype.sayHi=function(){

alert("Hi");

}

通过new对象的方式測试:

var p=new Person();

alert(p.value);

p.sayHi();

(2).集中式为函数原型添加属性

Person.prototype={

value:"是猪";

sayHi:function(){alert("Hi");}

}

分散和集中式都能够为函数添加属性。可是我们推荐集中式的为函数添加属性

3.函数对象的属性或方法与原型的属性或方法同名时:

<script type="text/javascript">
//这表明了原型上的属性和方法加上去了可是优先级是函数对象上的属性和方法的优先级要高于函数对象的原型上的属性和方法的
/*
* 函数对象的属性或方法与原型的属性或方法同名时:
* * 调用的属性和方法,是函数对象的属性和方法
* * 函数对象本身的属性和方法与原型的属性和方法同一时候存在
* * 函数对象本身的属性和方法的优先级要高于原型上的熟悉感和方法
*/
function Hero(){
this.name = "李卫康";
this.sayMe = function(){
alert("我是李卫康.");
}
} //原型添加的属性和方法,究竟有没有添加上去呢? Hero.prototype = {
name : "周芷若",
sayMe : function(){
alert("我是周芷若.");
}
} var hero = new Hero(); alert(hero.name); //output zhangwuji delete hero.name; alert(hero.name); //output zhouzhiruo </script>

測试:第一个打印的是李卫康.而不是周芷若.这说明函数原型中的属性和函数定义的重名的时候不会被覆盖..函数对象的是函数对象的 原型的是原型的....把函数对象中的属性删除后..我们在打印:周芷若...

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

4.利用原型又一次定义函数对象:也就是说我们定义函数对象的时候定义一个空的,把全部的属性和方法定义在原型中.

<script type="text/javascript">
//定义一个空的函数
function Person(){};
//把属性和方法定义在函数原型上
Person.prototype={
name:"程崇树",
seeAV:function(){
alert("树哥喜欢蔡司!");
}
}
var p=new Person();
alert(p.name);
p.seeAV(); </script>

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

5.扩展内建对象的属性和方法(我们为Array对象添加了一个函数....)

<script type="text/javascript">
Array.prototype.inArray=function(color){
for(var i=0;i<Array.length;i++){
if(this[i]=="red"){
return true;
}
}
return false;
}
var color=["red","blue"];
alert(color.inArray("red")); </script>

JavaScript高级特性之原型的更多相关文章

  1. javascript高级特性

    01_javascript相关内容02_函数_Arguments对象03_函数_变量的作用域04_函数_特殊函数05_闭包_作用域链&闭包06_闭包_循环中的闭包07_对象_定义普通对象08_ ...

  2. javascript高级特性(面向对象)

    javascript高级特性(面向对象): * 面向对象: * 面向对象和面向过程的区别: * 面向对象:人就是对象,年龄\性别就是属性,出生\上学\结婚就是方法. * 面向过程:人出生.上学.工作. ...

  3. JavaScript高级特性-数组

    1. JavaScript中的数组 在C++.Java中,数组是一种高效的数据结构,随机访问性能特别好,但是局限性也特别明显,就是数组中存放的数据必须是同一类型的,而在JavaScript中,数组中的 ...

  4. JavaScript高级特性-创建对象的九种方式

    1. 对象字面量 通过这种方式创建对象极为简单,将属性名用引号括起来,再将属性名和属性值之间以冒号分隔,各属性名值对之后用逗号隔开,最后一个属性不用逗号隔开,所有的属性名值对用大括号括起来,像这样: ...

  5. JavaScript高级特性-实现继承的七种方式

    声明和约定: 在C++和Java中,我们可以通过关键字class来声明一个类,在JavaScript中没有这个关键字,但我们知道可以通过new一个function创建对象,这个function类似C+ ...

  6. JavaScript高级内容:原型链、继承、执行上下文、作用域链、闭包

    了解这些问题,我先一步步来看,先从基础说起,然后引出这些概念. 本文只用实例验证结果,并做简要说明,给大家增加些印象,因为单独一项拿出来都需要大篇幅讲解. 1.值类型 & 引用类型 funct ...

  7. JavaScript 高级特性

    1. 原型Prototype 1.1 构造函数 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定 ...

  8. JavaScript高级程序设计之原型对象

    构造函数.原型对象.构造器是一体的关系,同时产生: 实例中的隐藏属性__proto__指向原型对象: 原型对象是这四种关系的纽带. 原型对象是动态的,不论在何处变化,实例中可以立即体现出来. var ...

  9. javascript高级知识点——函数原型

    代码信息来自于http://ejohn.org/apps/learn/. 向函数的原型中添加方法 function Ninja(){} Ninja.prototype.swingSword = fun ...

随机推荐

  1. [Luogu2324]八数码难题

    抱歉...我可能真的做搜索上瘾了... 还是IDA*,自己看看就好了... 注意一下搜索顺序 #include<cstdio> #include<queue> #include ...

  2. 5.27 indeed 第三次网测

    1. 第一题, 没有看 2. 暴力枚举.每一个部分全排列, 然后求出最大的请求数. #include<bits/stdc++.h> #define pb push_back typedef ...

  3. C - New Year Candles

    Problem description Vasily the Programmer loves romance, so this year he decided to illuminate his r ...

  4. JDBC的详细使用

    1.首先说一下需要用到的工具: ①我这里用的数据库是MySql5.6 ,MySql6.0开始被Oracle收购需要付费了,6.0以下版本免费. ②去Maven仓库下载JDBC的jar包 Maven仓库 ...

  5. VS2013(Win10X64)-配置编译Caffe

    主要看这篇文章,有点小瑕疵,瑕不掩瑜.参考链接:http://www.bubuko.com/infodetail-902302.html 文中红色标记为文章小瑕疵的地方,在此文中标记出来,做为修改对上 ...

  6. HDU_1969_二分

    Pie Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. Node.js 常用Mongoose方法

    Node.js 手册查询-Mongoose 方法 一.Schema 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力.可以说是数据属性模型(传统意义的表结构 ...

  8. 【转】虚拟化(五):vsphere高可用群集与容错

    vsphere高级功能需要vcenter server和共享存储的支持才能实现.vsphere的高级功能有 vmotion.storage vmotion.vsphere HA.vsphere DRS ...

  9. day34-2 类和对象(重点)

    目录 类 定义类和对象 __dict__ 和__class__ 创建对象时的底层运作 定义对象独有的特征 init __slots__(了解) 给对象添加属性时的底层运作 类 分类/类别 上述的代码( ...

  10. 【转载】InputStreamReader和OutputStreamWriter 的区别和用法

    一.InputStreamReader 用于将一个字节流中的字节解码成字符 , 用法如下: @Test public void Test19() throws Exception { InputStr ...