闭包

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. bzoj2395 [Balkan 2011]Timeismoney(最小乘积生成树+计算几何)

    题意 每条边有两个权值\(c,t\),请求出一颗生成树,使得\(\sum c\times \sum t\)最小 题解 为什么生成树会和计算几何扯上关系-- 对于每棵树,设\(x=c,y=t\),我们可 ...

  2. Ping命令简单报错介绍

    了解ABC类IP地址:网络.主机.子网.广播. ---------------------------- 学会ping: ping www.baidu.com 网络检测:ping某一主机可以正常启动! ...

  3. 数学【洛谷P4071】 [SDOI2016]排列计数

    P4071 [SDOI2016]排列计数 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列 ...

  4. (STM32F4) External Interrupt

    外部中斷(External Interupt) 在MCU中是很常見而且很常用到的基本function,所以就不多做解釋.不過因為每顆MCU的配置都不太一樣所以在此記錄下來. External Inte ...

  5. js 原生JS实现轮播图

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. IOS mac入门

    https://sarin.iteye.com/blog/1754920 注册Apple开发者平台账号 ## https://www.cnblogs.com/liuluoxing/p/6549725. ...

  7. [BZOJ 4923][Lydsy1706月赛]K小值查询

    传送门 势能分析平衡树,splay或treap都可以 放个指针版的就跑 #include <bits/stdc++.h> using namespace std; #define rep( ...

  8. sharepoint_study_1

    描述:机器上进行SharePoint开发,需要SQL Server提供最基本的服务 解决: SQL Server 的数据库引擎: SQL Server 代理: SQL Server 浏览器组件:

  9. 【算法笔记】B1015 德才论

    1015 德才论 (25 分) 宋代史学家司马光在<资治通鉴>中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取人之术,苟不得圣人,君 ...

  10. 112th LeetCode Weekly Contest Validate Stack Sequences

    Given two sequences pushed and popped with distinct values, return true if and only if this could ha ...