javascript里的prototype
在javascript中,prototype是函数的一个固有属性,其他对象,比如字符串什么的,并没有这个属性。
这个属性做什么用呢?
1、用于该函数的所有实例进行共享
比如,共同的属性,共同的方法。类似C#里的静态全局变量。所有实例,是指通过new的方法,来进行构造该函数的实例对象。比如说
var Person = function(name) {
this.name = name;
}; var z3 = new Person("z3"); var l4 = new Person("l4");
z3、l4都是Person的实例。
那么这个时候或者在new之前,往Person的prototype添加属性,方法,两个实例z3、l4都能访问:
var Person = function(name) {
this.name = name;
}; var z3 = new Person("z3"); var l4 = new Person("l4"); Person.prototype.sayHi = function(hi) {
console.log(this.name + ":" + hi);
}; z3.sayHi("Hello World!");
l4.sayHi("Hello World!");
所以说,“prototype 属性使您有能力向对象添加属性和方法。”
2、public方法
也是由于这个特性,对于一个javascript的“类”(其实是函数了)来说,添加在prototype的方法是public方法,而内部的方法,则是private的。
var Person = function(name) {
this.name = name; Person.prototype.sayHi = function(hi) {//外部可以访问
console.log(this.name + ":" + hi);
};
this.sayHi2 = function(hi){//外部可以访问
console.log(this.name + ":" + hi);
}
var _sayHi = function(hi){//外部不能访问
console.log(hi);
}
}; var z3 = new Person("z3"); z3.sayHi("Hello World!");//OK
z3.sayHi2("hehehehe");//OK
z3._sayHi("hahahaha");//报错
3、继承
- var Father, Son, father, son;
- Father = (function() {
- function father(name) {//相当于构造函数了。这个构造函数很重要,下面的添加成员函数,属性,都靠它。
- this.name = name;
- }
- father.prototype.sayHi = function(hi) {
- return console.log(this.name + " : " + hi);
- };
- return father;
- })();
- Son = (function() {
- function Son(name) {
- this.name = name;
- }
- Son.prototype = new Father();//继承的诀窍在于此
- Son.prototype.cry = function(){ console.log("噢噢噢");}//子类扩展
- return Son;
- })();
- son = new Son("leftfist");
- son.sayHi("Hello World!");
- son.cry();
有关这个prototype的来历,阮一峰的博文有详细介绍,从中可以理解为什么会有这个东西。主要是因为当初设计者不想将javascript设计得那么复杂,搞成一个面向对象那么正式的语言,但又要照顾对象的继承等属性,因此提供了这么一个东东。
http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javascript.html
javascript里的prototype的更多相关文章
- 悟透Javascript之 原型prototype
构造函数的Prototype上定义的方法确实可以通过对象直接调用,而且代码是共享的.我表示我不懂.太难理解了,艹.在Javascript中,prototype不但能让对象共享自己的财富,而且proto ...
- JavaScript里的依赖注入
JavaScript里的依赖注入 我喜欢引用这句话,“程序是对复杂性的管理”.计算机世界是一个巨大的抽象建筑群.我们简单的包装一些东西然后发布新工具,周而复始.现在思考下,你所使用的语言包括的一些内建 ...
- JavaScript 里,$ 代表什么?/JQuery是什么语言?/html中用link标签引入css时的中 rel="stylesheet"属性?/EL表达式是什么?
JavaScript 里,$ 代表什么? 比如说我写一个mouseover事件: $(document).ready(function(){ $("p").mouseover(fu ...
- JavaScript里的循环方法总结
JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的: for (var index = 0; index < myArray.length; index++) ...
- C# -- 等待异步操作执行完成的方式 C# -- 使用委托 delegate 执行异步操作 JavaScript -- 原型:prototype的使用 DBHelper类连接数据库 MVC View中获取action、controller、area名称、参数
C# -- 等待异步操作执行完成的方式 C# -- 等待异步操作执行完成的方式 1. 等待异步操作的完成,代码实现: class Program { static void Main(string[] ...
- JavaScript里的循环方法之forEach,for-in,for-of
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...
- JavaScript里的循环方法:forEach,for-in,for-of
JavaScript诞生已经有20多年了,我们一直使用的用来循环一个数组的方法是这样的: for (var index = 0; index < myArray.length; index++) ...
- JavaScript中Object.prototype.toString方法的原理
在JavaScript中,想要判断某个对象值属于哪种内置类型,最靠谱的做法就是通过Object.prototype.toString方法. ? 1 2 var arr = []; console.lo ...
- 谈谈javascript中的prototype与继承
谈谈javascript中的prototype与继承 今天想谈谈javascript中的prototype. 通常来说,javascript中的对象就是一个指向prototype的指针和一个自身的属性 ...
随机推荐
- Xcode5真机调试
http://blog.csdn.net/u011332675/article/details/17397849 (真机调试详解) http://blog.sina.com.cn/s/blog_ ...
- [JOYOI] 1051 选课
题目限制 时间限制 内存限制 评测方式 题目来源 1000ms 131072KiB 标准比较器 Local 题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校 ...
- c++基础_回文数
#include <iostream> using namespace std; int main(){ ;i<;i++){ ; int n=i;//暂存该四位数来计算 ,以防改变i ...
- ruby on rails安装(win7x64)
Ruby下载地址http://rubyinstaller.org/downloads/ (以安装2.1.7为例,2.2.3未能安装成功) 安装完之后测试是否安装成功
- Spring核心技术(八)——Spring自动装载的注解
本文针对自动装载的一些注解进行描述. 基于注解的容器配置 @Required注解 @Required注解需要应用到Bean的属性的setter方法上面,如下面的例子: public class Sim ...
- echarts的简单应用之(一)柱形图
前段时间做项目需要绘制一些图表来展示信息,从网上资料来看用的比较多的是百度开源的echarts.echarts的官网上有API以及demo.上面的图形都是非常炫的,不过都是静态 数据,我们做项目时不可 ...
- SpringBoot第十六篇:自定义starter
作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11058502.html 版权声明:本文为博主原创文章,转载请附上博文链接! 前言 这一段时间 ...
- mysql-5.7.17-winx64免安装配置
一,下载mysql-5.7.17-winx64.zip 地址:https://dev.mysql.com/downloads/file/?id=467269 二,解压到自己的某个磁盘:data文件夹和 ...
- Codeforces713D. Animals and Puzzle
$n<=1000,m<=1000$,$n*m$的01矩阵,给$t<=1000000$个询问,每次问一个矩形中最大的1正方形的边长. 先想想不考虑“一个矩形中”的限制,那记$f(i,j ...
- cogs——7. 通信线路
7. 通信线路 ★★ 输入文件:mcst.in 输出文件:mcst.out 简单对比时间限制:1.5 s 内存限制:128 MB 问题描述 假设要在n个城市之间建立通信联络网,则连通n ...