闭包

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原型使用基础的更多相关文章

  1. 【JavaScript 封装库】Prototype 原型版发布!

    /* 源码作者: 石不易(Louis Shi) 联系方式: http://www.shibuyi.net =============================================== ...

  2. javascript学习总结(一):基础知识。

    1 数据类型a.数据类型共有7种,字符串(string).数字(number).布尔(boolean).数组(array).对象(object).Null.Undefined. 其中布尔(逻辑)类型只 ...

  3. Javascript学习-闭包

    看的这篇 http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html 各种专业文献上的"闭包" ...

  4. javascript --学习闭包,自由变量

    闭包 下面是百度百科的解释: 闭包是指可以包含自由(未绑定到特定对象)变量的代码块:这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义(局部变量). 也就是说一个代码块 ...

  5. JavaScript oop proto与prototype原型图

    [_proto_与prototype] 1.prototype(函数的原型):函数才有prototype.prototype是一个对象,指向了当前构造函数的引用地址. 2._proto_(对象的原型对 ...

  6. Javascript学习笔记--理解prototype

    prototype和closure是js中两个不好搞懂的概念,幸好网上有很多相关的文章,在网上查了一遍以后,总是是觉得有点理解了.今天先说说prototype. 之前一直被ajax in action ...

  7. javascript学习笔记(一):基础、输出、注释、引用、变量、数据类型

    javascript脚本必须位于<script></script>之间,<script>标签可以位于<head>中,也可以位于<body>中 ...

  8. JavaScript学习总结(三)——闭包、IIFE、原型、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  9. 深入理解javascript原型和闭包(3)——prototype原型 (转载)

    深入理解javascript原型和闭包(3)——prototype原型   既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的 ...

随机推荐

  1. python3关于date和time的标准库

    python3中关于日期和时间的标准库datetime和time,之前都是用的时候随用随查,今天系统的看一下用这两个库可以做些什么. 1.time标准库 #首先添加一个time对象,看一下该对象的属性 ...

  2. 解决vs code中golang插件依赖安装失败问题

    解决vs code中golang插件依赖安装失败问题 Installing github.com/nsf/gocode SUCCEEDED Installing github.com/uudashr/ ...

  3. Mui 选项卡 tab 高度 没有自适应....

    因为项目中 用到了 mui ,mui 的选项卡有时候无法自适应高度,这回导致有的tab 出现一大片空白区域... 从jquery 的 思路 是  用一个值 保存 当前 的 高度... 当 点击其他 t ...

  4. 清华集训2017D2T1 小 Y 和地铁(metro)

    题目:https://www.luogu.org/problem/show?pid=P4005 题意:一条线段,给定n个点(n<=44)其中每个点可能对应另外一个点.如果一个点有对应点,那么就要 ...

  5. [WC2008]游览计划(斯坦纳树)

    [Luogu4294] 题解 : 斯坦纳树 \(dp[i][j]\) 表示以\(i\)号节点为根,当前状态为\(j\)(与\(i\)连通的点为\(1\)) 当根\(i\)不改变时状态转移方程是: \( ...

  6. visual studio 使用Resharper进行测试

    安装Resharper 添加nunit.framework 测试代码 [TestFixture] public class AddresLabelPrintImplTest { [Test] publ ...

  7. 【算法笔记】B1026 程序运行时间

    1026 程序运行时间 (15 分) 要获得一个 C 语言程序的运行时间,常用的方法是调用头文件 time.h,其中提供了 clock() 函数,可以捕捉从程序开始运行到 clock() 被调用时所耗 ...

  8. 洛谷 P3205 [HNOI2010]合唱队

    题目链接 题解 区间dp \(f[i][j]\)表示i~j区间最后一次插入的是\(a[i]\) \(g[i][j]\)表示i~j区间最后一次插入的是\(a[j]\) 然后就是普通区间dp转移 Code ...

  9. POJ_3069 Saruman's Army 【贪心】

    一.题面 POJ3069 二.题意分析 我的理解是,可以在每个点设置一个监测点,能够监测到范围R内的所有其他点,那么问给出N个点的一维位置,需要在其中挑多少个监测点把所有点都监测到. 贪心解决: 1. ...

  10. HDU 6189 Law of Commutation(规律)

    题意: 给定n,a,求区间 [ 1 , 1<<n ] 的数b 满足 的个数 分析:打出暴力程序可以发现当a为奇数的时候结果为一: 当a为偶时 , a^b=2^(k+b)mod 2^n ; ...