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. wap网测一道题目

    1. 给定一个字符串s, 1 <= len(s) <= 3000, 定义odd palindrome string为长度为奇数的回文串, 求s中该奇回文串的个数. 比如axbcba , 结 ...

  2. POI合并单元边框问题解决方法

    http://blog.csdn.net/hardworking0323/article/details/51105430

  3. 自动换行 word-break:break-all和word-wrap:break-word

    1.word-break:break-all;当内容(比如很长的一个单词)到每行的末端时,它会把单词截断显示一部分,下一行显示后一部分. 2.word-wrap:break-word;当内容(比如很长 ...

  4. 2016年8月17日 内省(1)18_黑马程序员_使用beanUtils操纵javabean

    8.内省(1):18_黑马程序员_使用beanUtils操纵javabean 1.导入两个包: 2.调用静态方法. 9.泛型 map.entrySet() :取出map集合的键值对组成一个set集合. ...

  5. google浏览器 打印A4 最大宽度和高度px

    width: 1563px;(max) + = 分页了 + = 分页了 + = 没有分页 / ViewBag.results[].Count)); <td width="15%&quo ...

  6. pyqt5 做的小程序,可以用来UI做个小demo

    #!/usr/bin/python3# -*- coding: utf-8 -*- """ZetCode PyQt5 tutorial This program crea ...

  7. Linux删除重复内容命令uniq笔记

    针对文本文件,有时候我们需要删除其中重复的行.或者统计重复行的总次数,这时候可以采用Linux系统下的uniq命令实现相应的功能. 语法格式:uniq [-ic] 常用参数说明: -i 忽略大小写 - ...

  8. loadrunner安装方法

    1.loadrunner安装网盘地址:  http://pan.baidu.com/s/1hrP6mDQ 一般会提示:“vc2005_sp1_with_atl_fix_redist 2.确认时提示缺少 ...

  9. Python学习笔记之文件处理

    1.打开和关闭 要打开文件可以使用函数 open(),它位于自动导入模块 io 中.函数将文件名作为唯一不可缺少的函数,并返回一个文件对象.它还有一个名叫 mode 的参数,用于指定文件模式,其可取值 ...

  10. C++string和int的相互转化

    本方法主要利用sstream头文件中的方法来进行转换 1.int转成string #include <iostream> #include<string> #include&l ...