javascript学习:闭包和prototype原型使用基础
闭包
function Person(name) {
this.Username = name;
var Userage = 18;
//通过这种方法可以模拟私有成员
//类似于private成员
this.setAge = function (age) {
Userage = age;
}
//类似于public成员
this.getAge = function () {
return Userage;
}
}
var p1 = new Person("huahuah");
p1.setAge(100);
alert(p1.getAge())
//-------------------------------------------------
var x = 100;
//执行3 找到x定义
function f1() {
var y = 101;
//执行2,找到x未定,继续找
alert(y);
alert(x);
//整个return函数就是常说的闭包
//由此函数开始执行1,找不到x
//闭包靠的是作用域链作用的,必须一层一层释放
return function () {
var y = 99;
alert(x);
alert(y);
//向上找
}
}
function f1() {
var funs = new Array();
//2:找到i,但是i已经循环遍历了i=10
for (var i = 0; i < 10; i++) {
//1:先执行闭包内,找不到i,搜索外层
funs[i] = function () {
alert(i);
}
}
//3:返回i=10
return funs;
}
//4:声明myfuns=f1()
var myfuns = f1();
for (var n = 0; n < myfuns.length; n++) {
//5:因为f1的长度=10,所以n的长度也=10,循环遍历弹出n的值
myfuns[n]();
}
原型:
//prototype原型
function Person(name, age, email) {
this.UserName = name;
this.UserAge = age;
this.UserEmail = email;
this.sayHi=function(){
alert('你好,我的名字是' + this.UserName + '今年' + this.UserAge + '岁了' + '我的联系邮箱是' + this.UserEmail); }
this.sayHellp= function () {
alert()
}
}
//通过构造函数创建的对象 都是完全独立的对象 对象与对象之间是没有关系的,类似c#中的对象
var p1 = new Person("黄", "18", "595892312@qq.com");
p1.sayHi();
var p2 = new Person("huang", "23", "123@163.com");
alert('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');
p2.sayHi();
p1.UserName = "zhen";
p1.UserAge = 15;
p1.UserEmail = "854658496@sina.com";
p1.sayHi(); ///////////////////////////原型2
//定义构造函数
function Person(name, age, email) {
this.UserName = name;
this.UserAge = age;
this.UserEmail = email;
}
//_proto_
//prototype是person对象的原型对象
//在person的原型对象中加一个sayHi()方法
Person.prototype.sayHi = function () {
alert("My name is" + this.UserName + "," + this.UserAge + "old,My Email is" + this.UserEmail);
}
//通过构造函数创建函数对象
var p1 = new Person("susan", 18, "suan@gogle.com");
p1.sayHi();
var p2 = new Person("黄", 23, "5231@qq.com");
p2.sayHi(); ////////////////通过原型实现扩展方法
//给字符串对象原型添加haha方法
String.prototype.haha=function (){
return this+"☆";
};
//创建字符串对象
var msg = '56465455645';
msg = msg.haha();
alert(msg); ///通过原型prototype实现继承
//js中没有类的概念,继承是通过对象和对象来实现的
function Person(name,age,email) {
this.Username = name;
this.Userage = age;
this.Useremail = email;
}
Person.prototype.sayHi = function () {
alert("我的名字叫做" + this.Username + "今年" + this.Userage + "岁了,我的邮箱是:" + this.Useremail);
};
//student
function Student(sid) {
this.student_id = sid;
}
//继承 通过prototype=p1继承Person中的属性
Student.prototype = new Person("黄", 18, "huang@163.com");
var s1 = new Student('1564156165');
s1.Username = '李'; alert(s1.Username);
javascript学习:闭包和prototype原型使用基础的更多相关文章
- 【JavaScript 封装库】Prototype 原型版发布!
/* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...
- javascript学习总结(一):基础知识。
1 数据类型a.数据类型共有7种,字符串(string).数字(number).布尔(boolean).数组(array).对象(object).Null.Undefined. 其中布尔(逻辑)类型只 ...
- Javascript学习-闭包
看的这篇 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html 各种专业文献上的"闭包" ...
- javascript --学习闭包,自由变量
闭包 下面是百度百科的解释: 闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量). 也就是说一个代码块 ...
- JavaScript oop proto与prototype原型图
[_proto_与prototype] 1.prototype(函数的原型):函数才有prototype.prototype是一个对象,指向了当前构造函数的引用地址. 2._proto_(对象的原型对 ...
- Javascript学习笔记--理解prototype
prototype和closure是js中两个不好搞懂的概念,幸好网上有很多相关的文章,在网上查了一遍以后,总是是觉得有点理解了.今天先说说prototype. 之前一直被ajax in action ...
- javascript学习笔记(一):基础、输出、注释、引用、变量、数据类型
javascript脚本必须位于<script></script>之间,<script>标签可以位于<head>中,也可以位于<body>中 ...
- JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- 深入理解javascript原型和闭包(3)——prototype原型 (转载)
深入理解javascript原型和闭包(3)——prototype原型 既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的 ...
随机推荐
- 用C语言构建一个可执行程序的流程
1.流程图 从用C语言写源代码,然后经过编译器.连接器到最终可执行程序的流程图大致如下图所示. 2.编译流程 首先,我们先用C语言把源代码写好,然后交给C语言编译器.C语言编译器内部分为前端和后端. ...
- java 图书馆系统 练习
话不多说 娱乐 ================================================== book 类(书本的基础属性) package 图书管理系统01; /** * @ ...
- CentOS7.3托管磁盘虚拟机扩容数据磁盘
随着托管磁盘的上线,虚拟机支持的单块磁盘容量从1TB到达了4TB,客户对单块磁盘容量的需求量也会变的很大. 操作之前需要重点查看: 由于扩容磁盘的操作非同小可,一旦哪一步出现问题,就会导致分区损坏,数 ...
- 6. 重点来啦,pytest的各种装饰圈fixtures
pytest中,fixture的目的是什么 为可靠的和可重复执行的测试提供固定的基线.(可以理解为测试的固定配置,使不同范围的测试都能够获得统一的配置.) fixture提供了区别于传统单元测试(se ...
- 洛谷 P3376【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- springcloud微服务总结四 负载均衡
一:Ribbon简介 Ribbon是Netflix公司开源的一个负载均衡的项目,是一个客户端负载均衡器,运行在客户端上.它是一个经过了云端测试的IPC库,可以很好地控制HTTP和TCP客户端的一些行为 ...
- window 7/8/10 安装nginx
1.百度 nginx 找到 http://nginx.org/ 官网 2.找到一个nginx 版本 如 最新版本 2018-12-25 nginx-1.15.8 mainline v ...
- Hibernate学习笔记(五)—— Hibernate查询方式
一.对象图导航查询 对象图导航查询方式是根据已经加载的对象,导航到他的关联对象.它利用类与类之间的关系来查询对象.比如要查找一个联系人对应的客户,就可以由联系人对象自动导航找到联系人所属的客户对象.当 ...
- P2762 太空飞行计划问题
传送门 经典的最大权闭合子图问题 实验有正的价值,仪器的价值为负 为了实验我们必须选择相应的仪器 所以从 S 连向实验,边权为实验的价值 实验与相应仪器之间连边,边权为 INF 仪器连向 T 边权为仪 ...
- Codeforces - 185A 简单矩阵快速幂
题意:求第n个三角形内部的上三角形个数 对每个三角形分别维护上下三角形个数,记为\(dp[1][i],dp[2][i]\) 规律很明显是 \(dp[1][i+1]=3*dp[1][i]+dp[2][i ...