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. # 深入理解Redis(二)——内存管理的建议与技巧

    引语 随着使用Redis的深入,我们不可避免的需要深入了解优化Redis的内存,本章将重点讲解Redis的内存优化之道,同时推荐大家阅读memory-optimization一文. 想要高效的使用Re ...

  2. LeetCode Weekly Contest 28

    1. 551. Student Attendance Record I 2. 552. Student Attendance Record II hihocode原题,https://hihocode ...

  3. maven添加本地jar包的方法

    1.将一个本地的jar包随便放在一个放入本地文件夹中 (文件夹位置 和 jar包名称都随意) 例:F:\java\repository\a 文件夹下,名称为:icepdf-core-6.0.jar 2 ...

  4. java bean转Map

    /** * @author xxxxxxxxxxx * @param object * 待转化类 * @param format自定义转化类型 * @return Map<String,Stri ...

  5. C#之调用存储过程

    C#调用存储过程   以下内容可能有错漏之处,请大家多多指教. C#后台代码如下: //调用存储过程的方法public static void Startupworkflow(string first ...

  6. .net MVC成长记录(四)Linq(1)

    今天不忙,没什么事情,继续写写随笔. 之前的文章写到了EF,很多人留言EF的操作用什么?  今天,就继续给大家分享EF的操作, Linq . 先从Linq操作Object内置对象开始 从Linq的基础 ...

  7. MVC微信浏览器图片上传(img转Base64)

    因公司业务需要,需要做一个微信公众号里的图片上传功能,主要用到的技术就是 img转base64 上到服务器 话不多说, 贴代码 先看前端显示出来的东西 OK 图片不重要,看代码 <!--微信图片 ...

  8. CSS选择器优先级计算

    优先级从高到低排列,浏览器优先满足前面的规则 1,!important优先级最高 2,内联样式 3,作者>读者>浏览器 4,优先级权重加法 id选择器+100/个 类/伪类选择器+10/个 ...

  9. 笔记 — 动画效果(Css3)

    /** * animation-name: 调用 @keyframes 所定义的动画 * animation-duration: 动画周期所花费的时间长度 * animation-timing-fun ...

  10. 错误:android.view.InflateException: Binary XML file line #167: Binary XML file line #167: Error inflating class <unknown>

    1:错误日志 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.8.activity.RecordActiv ...