zoukankan      html  css  js  c++  java
  • 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 css html jquery bootstrap vue webpack es6
  • 相关阅读:
    JavaScript对原始数据类型的拆装箱操作
    Javascript继承(原始写法,非es6 class)
    动态作用域与词法作用域
    自行车的保养
    探索JS引擎工作原理 (转)
    C语言提高 (7) 第七天 回调函数 预处理函数DEBUG 动态链接库
    C语言提高 (6) 第六天 文件(续) 链表的操作
    C语言提高 (5) 第五天 结构体,结构体对齐 文件
    C语言提高 (4) 第四天 数组与数组作为参数时的数组指针
    C语言提高 (3) 第三天 二级指针的三种模型 栈上指针数组、栈上二维数组、堆上开辟空间
  • 原文地址:https://www.cnblogs.com/shapaozi/p/6854624.html
Copyright © 2011-2022 走看看