浅析JavaScript的prototype
一、JavaScript对象的创建
(1)对象方法
function Student(name){
this.name=name;
this.showName=function(){
alert("my name is "+this.name); };
}
调用showName方法:
new Student('a').showName();
对象方法的调用,类要生成一个实例,该实例可以调用该方法;
(2)类方法
Student.showAge=function(){
alert('age is 20');
}
调用方式:
Student.showAge();
类方法相当于C#的静态方法,不需要new一个对象实例,可以直接调用;
(3)继承方法
Student.prototype.sayHello=function Hello(){
alert('hello');
}
调用方法:
new Student('a').sayHello();
原型方法一般用与继承父类的方法和方法共享;
(4)对象的字面量方式创建
var p2={
age:21,
name:'jack',
sayAge:function(){
alert(this.age);
}
}
调用方法
p2.sayAge();
二、prototype的用法
(1)创建一个基类对象
function baseClass(){
this.name='jack';
this.showMsg=function(){
alert('base');
};
}
(2)创建一个新的对象
function extendClass(){
this.age=20;
}
(3)新对象引用原型对象
extendClass.prototype=new baseClass();
(4)查看新对象
在此,我们可以看到extendClass继承了baseClass的属性和方法,在extendClass对象中可以调用baseClass的对象和方法;
三、调用原型对象中的方法;
如果当原型对象和本对象均有同名的方法和属性时,调用时会先调用本对象的方法和属性;
(1)原型对象
function baseClass(){
this.name='jack';
this.showMsg=function(){
alert('base');
};
}
(2)新对象
function extendClass(){
this.age=20;
this.name='rose';
this.showMsg=function(){
alert('extend');
}
}
(3)新对象继承原型对象
extendClass.prototype=new baseClass();
(4)调用对象的方法
通过结果我们可以看到,当新对象和原型对象都有同一个属性和方法时,会调用本对象的方法和属性,那么我们该如何调用原型对象的方法和属性呢
4.1 使用__proto__来调用
4.2 使用call来调用
new baseClass().showMsg.call(new extendClass())
将extendClass对象当做bassClass对象,来调用baseClass的对象方法
(5)call和apply的使用和区别
5.1 call和apply主要是用来改变函数运行时的上下文,他俩功能一致;但在参数传递时:call传递参数个数任意,apply传递参数是数组形式;
5.2 call和apply的运用
基础方法
function Dog(name){
this.name='dog';
this.showName=function(){
alert("name1:"+this.name);
}
}
新的对象
function Fish(){
this.name='fish';
}
当Fish对象想要调用showName方法时,可用使用apply,或者call
var dog=new Dog();
var fish=new Fish();
dog.showName.call(fish)
dog.showName.apply(fish,[])
四、小结
五、参考链接
1、http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html
2、http://bbs.csdn.net/topics/390775296
浅析JavaScript的prototype的更多相关文章
- javascript 之 prototype 浅析
prototype 原型 javascript 是一种 prototype based programming 的语言, 而与我们通常的 class based programming 有很大 的区别 ...
- 浅析 JavaScript 中的 函数 currying 柯里化
原文:浅析 JavaScript 中的 函数 currying 柯里化 何为Curry化/柯里化? curry化来源与数学家 Haskell Curry的名字 (编程语言 Haskell也是以他的名字 ...
- 浅析 JavaScript 中的 函数 uncurrying 反柯里化
柯里化 柯里化又称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果. 因此柯里化的过程是 ...
- Javascript: 从prototype漫谈到继承(2)
本文同时也发表在我另一篇独立博客 <Javascript: 从prototype漫谈到继承(2)>(管理员请注意!这两个都是我自己的原创博客!不要踢出首页!不是转载!已经误会三次了!) 上 ...
- JavaScript 笔记 ( Prototype )
这阵子实在好忙 ( 这样说好像也不是一两个月了... ),然后因为工作伙伴都是 JavaScript 神之等级的工程师,从中也学到不少知识,毕竟就是要和强者工作才会成长呀!为了想好好瞭解他们写的程式码 ...
- Javascript Array.prototype.some()
当我们使用数组时,查找数组中包含某个特殊的项是非常常见的动作.下面例子是一个简单的实现: 01 planets = [ 02 "mercury", 03 " ...
- JavaScript和prototype
Protoype这个词在javascript中可以有两种理解: 第一种是作为javascript中的一个属性,其一般出现的形式为:类名.prototype. prototype 属性让你有能力向对象添 ...
- 在 JavaScript 中 prototype 和 __proto__ 有什么区别
本文主要讲三个 问题 prototype 和 proto function 和 object new 到底发生了什么 prototype 和 proto 首先我们说下在 JS 中,常常让我们感到困惑的 ...
- Javascript中prototype属性详解 (存)
Javascript中prototype属性详解 在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...
随机推荐
- hihoCoder 1288 Font Size 二分
题意:给定一个宽度为和高度为的屏幕,如果字体的大小为,那么一行可以显示个字,每一页可以显示行.给出段文本段落,每段有个文字,问现在能设置的最大字体并且总的页数不能超过? 思路:如果知道字体大小很容易求 ...
- day4(while 、练习题)
一.while ... else 方法 while else 的作用就是,确定循环正确执行完毕,else里面可以提示完成的情况. 二.练习题 1.编译型语言是编译完之后执行,解释性语言是边编译边执行, ...
- 电脑中dll文件丢失怎么恢复?
DLL文件是Windows系统中的动态链接文件,我们在运行程序时都必须链接到dll文件,如果缺少了则无法正常运行,相信大家都会遇到dll文件缺失的情况,那么电脑中dll文件丢失怎么恢复?下面装机之家分 ...
- 3.3.2 PCI设备对不可Cache的存储器空间进行DMA读写
在x86处理器和PowerPC处理器中,PCI设备对"不可Cache的存储器空间"进行DMA读写的过程并不相同.其中PowerPC处理器对"不可Cache的存储器空间&q ...
- freemarker中的left_pad和right_pad
freemarker中的left_pad和right_pad 1.简易说明 (1)left_pad 距左边 (2)right_pad 距右边 (3)当仅仅只有一个参数时,插入的是空白:当有两个参数时, ...
- freemarker写select组件(二)
freemarker写select组件 1.宏定义 <#macro select id datas value=""> <select id="${id ...
- INS-30011 输入的ADMIN口令不符合Oracle建议的标准
1.错误描述 2.错误原因 由于在设置密码时,首个字符为数字,导致出错 a.必须以字母开头 b.长度不超过30个字符 c.只能包含字母.数字和_.$.# d.不能使用关键字和保留字 3.解决办法 重新 ...
- asp.net URL重新实例
void Application_Start(object sender, EventArgs e) { // 在应用程序启动时运行的代码 RegisterRoutes(); } // 页面存放目录 ...
- Openstack_O版(otaka)部署_准备环境和依赖软件
架构介绍 本次案列为基本的三节点部署 一:网络: 1.管理网络:192.168.198.0/24 2.数据网络:10.0.0.0/24 二:操作系统: CentOS Linux release 7.3 ...
- gplots heatmap.2和ggplot2 geom_tile实现数据聚类和热图plot
主要步骤 ggplot2 数据处理成矩阵形式,给行名列名 hclust聚类,改变矩阵行列顺序为聚类后的顺序 melt数据,处理成ggplot2能够直接处理的数据结构,并加上列名 ggplot_tile ...