精华内容
下载资源
问答
  • 在舒适环境容易让人懒散,工作地方累,现在好长时间都没太多任务可以做。  我害怕荒废了自己,学如逆水行舟,不进则退,而且在程序员中,好多技术,如果你不用过上几个月你就忘光了,想要再重头拾起来要花...

      在舒适的环境容易让人懒散,工作的地方不累,现在好长时间都没太多任务可以做。

      我害怕荒废了自己,学如逆水行舟,不进则退,而且在程序员中,好多的技术,如果你不用过上几个月你就忘光了,想要再重头拾起来要花上不少的时间,最近下班之后有点懒散,就喜欢躺倒床上看一些视频啥的,我感觉我在这样一直下去可能会让自己越来越没有竞争力,定几个小目标吧。

      在今年过年之前要完成的工作,我相信我应该可以的。

      vue框架

      2018.9.6 -------  2018.9.26

        部门主要是以vue作为前端的框架去开发一些移动端的项目,我最近也一直在看文档和一些视频在练习,感觉现在还算不错了,自己记得笔记都快把官方文档API都快抄下来了,在这一段时间在加紧时间练习练习,把知识整理好,因为这个东西好多公司都会用得到,好好学一学。

        vue中衍生出来的那个前端模板框架elementUI也用一用,看他们有的人在用,我没有用过bootstrap框架,我感觉这个东西应该是一类东西,学一学。

        在期间再看两个vue案例视频跟着做一做。

      node.js

       2018.9.27 ----- 2018 - 10.27

        我之前学习这个的时间也算挺长的了吧,用这个做后台语言写了一个个人博客,就是感觉底子不太扎实,好多东西都是只知道是怎么用的,但是自己写不出来,还需要看之前的代码才可以写东西,所以这一个月不依靠那么多的框架,自己在去多写一写底层的东西,自己也去github上开源一个自己的那个npm包吧,再想想吧。

        博客园中发表学习node.js的文章,上一次说了要好好总结一下到现在了也就只发过那一篇毫无原创性的开头文章就再也没有写过东西了,发表十篇以上node.js的文章

      原生js设计模式

      2018.10.28 - 2018.11.28

        把js的那两本设计模式的书看完。

        在博客园中发表超过十篇js设计模式的文章

        在期间可以去研究一下vue的源码,并自己去尝试去模拟一下他的常用的一些功能。

        js的什么设计模式是为了解决什么问题记住, 上一次被人问到为了解决什么没说出来

      个人博客

        时间不限,过年之前完成吧

        在上述时间期间内,把页面的模板想好

        学习mongoodb数据库,之前用的一直都是mysql数据库,但是mongoo好一些,重构一下我的个人博客页面,并且好好兼容一下,主要针对手机端页面

        使用vue + node + mongoodb制作吧,手机端完成就好了,电脑端的在考虑,争取做成响应式

     

     react框架

        个人博客写完之后吧,时间在考虑考虑,再来改一改时间,现在前端三大框架,学习一下这个东西。

     

      上面的任务争取这半年来早一些完成吧,感觉还有好多东西是要学习的,H5的好多新的东西感觉也就是了解,可以尝试着自己去做一些东西出来,有了上面的这一些目标,我感觉就可以好一些了,我感觉可以完成上面的任务我应该是没有荒废自己的,多问问他人在干什么,多学习,要谦虚,乐于分享技术。

      希望以后每天都可以坚持坚持,每天多学一些知识总是不会错的。 不要荒废了自己的青春,我就是最棒的,我有时候也挺佩服我自己的,定的目标要完成,加油!!!

     

    转载于:https://www.cnblogs.com/z937741304/p/9600056.html

    展开全文
  • 小小总结

    2013-08-17 14:44:00
     一件任务的完成,意味着另外任务的开始,工作就这样,周而复始,就像春夏秋冬一样,四季轮回,其实工作是做,上一个工作任务也许并没有完成,而下一个任务已经有了安排,写代码,搞程序,其实里面有很多东西...

     

           一件任务的完成,意味着另外任务的开始,工作就这样,周而复始,就像春夏秋冬一样,四季轮回,其实工作是做不完的,上一个工作任务也许并没有完成,而下一个任务已经有了安排,写代码,搞程序,其实里面有很多东西是不可控制的,一个问题,一个似乎觉得微不足道的问题,可能让人绞尽脑汁,没有源码的帮助,如果是单纯的二次开发,有的时候真不知道问题出在什么地方,我这一段时间就被一个乱码问题折腾的要死,各种编码尝试都不见效果,这叫我如何是好?是我的问题,是程序的bug?还是……

        在公司曾跟同事开玩笑的说“程序员的工作是不分场合的,即便只周末,也只不过是换个地方写代码而已”,玩笑归玩笑,也确定有意思,像我这么追求完美的人,根本不允许自己的程序中出现任何瑕疵,但是这个我能做到吗?就像这面的这个bug,我简直是无力回天了!  算了不去想了,趁着这个周末也给自己放放假,写一些总结性的东西吧!

        程序员也要不断的学习,因为你不会知道你的下一个任务是什么,下一个任务是用什么语言,就像年初一样,我也不会知道自己会用JavaScript将写DEMO一样,还好,这么多年的学习以及这么多年的工作让自己有了些博客的“好习惯”,博客的内容可能不是那么的动人,也不可能像电视剧那样有故事情节,扣人心弦,但是却将自己的想法,心得记录下来,去跟同道中人分享,我其实不算一个多产的博主,网络上多产的博主那都是身经百战的大侠,我顶多是班门弄斧,我喜欢看博客,这些大侠的博客往往在告诉一些道理,或者那些容易出错的地方,甚至是一些自己的经验之谈,博客似乎在默默的充当着我们这些网虫交流的平台。

          程序员写的博文,很多时候似乎只有程序员能看懂,写博文的程序员也分为好多种,有一些长篇大论,有一些言简意赅等,前者算是苦口婆心的,尽量用言语去将一个事情说清楚,而后者追求简单,也许只有自己能看得懂,我就属于后者,往往说下目的,然后就是贴上一段代码,甚至自以为是,觉得不错。曾经看过一段话,如果你要说明的东西,不能让7,8岁的人明白,那么你要介绍的东西肯定是失败的,这句话就如当头一棒,让人从梦中惊醒,也许真是这样,只有自己明白,而他人却不明白,那么这算什么?也许我以前觉得,没有必要去花费更多的时间去解释,花费更多的言语去论述,其实写东西是一个很耗时的事情,如果是心思缜密的人,连错别字都不让出现,所以有的时候,我是故意忽略这些,现在一想这些其实就是所谓的细节,一个错别字可能会让一篇洋洋洒洒的文章美中不足,一个不详细的解释可能会让文章薄雾浓云,突然对那些长篇大论的博主升起了丝丝敬意。

         啰嗦了一大片,总算可以切入正题了,现在就是想将我学习JavaScript的一些心得记录下来。学习任何东西,都应知道这个东西的应用范畴,如果能了解这个东西的历史背景,那更好不过了,因为任何东西都不是凭空而来,能存活到现在的也可说是历尽千辛万苦,有人说过,存在即合理,也许我们不应该怀疑这句话,我也不算一个职业程序员,那么就用我的愚见说一下自己对学习这个东西的认知。

     !任何语言都有自己的数据类型,数据类型决定了如何存储数据以及如何使用数据,比如对String类型的数据如何操作,在JavaScript中数据类型可以从下图看出:

     

     

    2,对象

    JavaScript中的对象其实有种定义方法,可以通过函数,可以通过JSON格式的描述,记住一点JS中的对象是可以动态的添加方法和属性的。

     

    var ob1 = {};
    ob1.name = "liuyu";
    ob1.say = function () {
    
        alert("hello! " + this.name);
    }
    ob1.say();
    
    var ob2 = { name: "liuyu",
        say: function () {
            alert("hello!!" + this.name);
        }
    };
    
    ob2.say();
    
    
    function person(name) {
    
        this.say = function () {
            alert(name);
        };
    
    }
    var ob3 = new person("liuyu");
    
    ob3.say();

     

     

    3,奇怪的this

    在OOP编程中,this这个词语对我们来说简直就是司空见惯,而且含义也很明确就是当前对象,对于C#/Java来说,就是我们new的这个对象,可以用一成不变来描述,但是在JavaScript中,这个This是变化的,可能是指向window对象,也可能是指向非window对象,下面的例子就可以知道:

     

                var x = 1;
    
            function Test() {
    
                this.x = 0;
    
            };
    
            Test();
    
            alert(x);
    
            liuyu.getDom("test", "hello!");
    
            var ob = new Test();
    
            alert(x);
    

     两次分别弹出的数据是0,1,这是为什么呢?原因就出现在this,当直接用Test方法,这this其实指向的就是window对象,当使用new了之后,this就是ob对象,这个是因为在JavaScript语言中有一个作用域的概念,任何一个变量都在自己的作用域内生存,当new了一个对象之后,那么就会在当前作用域对象上产生一个新的作用域。在JavaScript,全局环境本身就一个对象。在浏览器宿主中这个对象是window,而当Javascript用于其它非浏览器的宿主,如嵌入式的环境中,可能会是其它的对象。我们开始定义的变量都是在window这个作用域上的,上面的Test()方法就相当于window.Test(),是在window被省略而已,但是用了new之后,Test就不在是window的了。但是记住一点this始终指向当前的作用域对象。如果说这样还不算很清楚,那我就多说点,JS中对象的生成其实是分了三个步骤:

     

     function person(name, age) {
                this.name = name;
                this.age = age;
    
    
            }
            var ob4 = new person("刘宇",25);
            alert(ob4.name);
    
            var ob5 = {};
            ob5.__proto__ = person.prototype;
            
            person.call(ob5, "liuyu", 25);//person.apply(ob5,[])参数为数组,更改作用域
            alert(ob5.age);

     

     

     

     

    先声明一个对象,ob5,然后将函数的原型赋给对象的内置属性__proto__,然后调用函数的call方法或者apply方法,这个方法就是初始化对象,将函数内部的this指向ob5,或者替换ob5,也就是说如果不用new的时候,函数中的this就是window,而new了之后函数中的this就成了ob5,在JS中this是可以改变的。

     

    4,波粒二象性的函数

    这个波粒二象性应该是物理学中的概念,我牵强的在这里借用下,因为JS中的函数可以充当很多角色,JS中的函数可以充当对象,也可以充当构造函数,甚至可以充当“类”(JS中并没有类的说法),就因为这个函数有很多的角色,我才借用了这个说辞。在Javascript中,函数是Function类的实例,Function间接继承自Object,所以,函数也是一个对象,因此,我们可以用赋值的方法创建函数,当然,我们也可以将一个函数赋给类的一个属性变量,那么,这个属性变量就可以称为方法,因为它是一个可以执行的函数。如下面的例子:

     

     

            function persontest(name) {
                alert(name);
    
    
            };
            persontest("liuyu");
            

     

        function Shape() {
                var z = 8;
                var y = 1;
                this.draw = function () {
                    alert(z);
                };
            };
    
            var ob6 = new Shape();
            ob6.draw();
       var fun1 = function Shape() {
                var z = 8;
                var y = 1;
              alert(z);
            };
            fun1();

     

     

    5,原型

    原型其实是一个对象,原型在JS中并不好理解,还是从例子说起:

    function Person( name, age ){  
    
        this.name = name; 
    
        this.age = age; 
    
    
    
     }  
    
     Person.prototype = {  
    
        getName:function(){ 
    
            return this.name;  
    
        }, 
    
        getAge:function(){ 
    
            returnthis.age;  
    
        } 
    
     }
    
    var ob7 = new Person("liuyu", 25);
    ob7.getName();

    我们发现这个代码居然可以运行成功,但是我们在Person中并没有getName这个方法,代码居然毫无错误,居然有了正确的答案,真是发人深思,这必须归功于原型,每个函数都有一个prototype的属性,这个属性其实一个对象,成为原型对象,当一个对象在已经定义的函数中没找到方法或者属性,那么他就会去这个函数的原型对象中去找,以此类推,直到找到为止。现在分析一下ob7,ob7这个对象内部并没有定义getName方法,但是在Person.prototype这个原型对象中有,所有ob7,就在这个原型对象中找到了,并调用了。原型类似数据机构中的链表指针,指向了下一个对象,之所以能找到这个,还不仅仅如此,这是因为一个对象内部有一个内建的__proto__对象,还记得上面介绍过的对象创建三步骤么?第二部就用到了这个对象。对象的__proto__就是函数的原型对象,那么真正的寻找属性和方法就是依靠这个__proto__对象的,尽管这个对我们来说不可见,但是这是其内部实现原理。 

            function person(name, age) {
                this.name = name;
                this.age = age;
    
    
            }
            var ob4 = new person("刘宇", 25);
            alert(ob4.name);
    
            var ob5 = {};
            ob5.__proto__ = person.prototype;
    
            person.call(ob5, "liuyu", 25); //person.apply(ob5,[])参数为数组,更改作用域
            alert(ob5.age);
    
            alert(person.constructor);
            alert(person.prototype.constructor);
            alert(ob5.constructor);
            alert(person === person.prototype.constructor);
            alert(person === ob5.constructor); //IE和Chrome显示的结果不一样,从已有的知识判断后者是正确的。


     

     上面可能是让人费解的话,下面我们就图文并茂的进行解释和说明:

    var foo = { 
    x: 10, 
    y: 20 
    }; 

     

     

     

    下例中b和c共享a的属性和方法,同时又有自己的私有属性。__proto__默认的也有指向。它指向的是最高级的object.prototype,而object.prototype的__proto__为空。

    var a = { 
    x: 10, 
    calculate: function (z) { 
    return this.x +this.y+  z 
    } 
    }; 
    var b = { 
    y: 20, 
    __proto__: a 
    }; 
    
    var c = { 
    y: 30, 
    __proto__: a 
    }; 
    
    // call the inherited method 
    b.calculate(30); // 60 

     

    理解了__proto__这个属性链接指针的本质,我们可以继续深入创建对象的函数我们称之为构造函数,这个和其它语言无异,constructor始终指向创建当前对象的构造(初始化)函数。每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数,一个对象比如说ob5之所以有constructor这个属性,那是因为这个constructor是在原型对象上的,看下面的例子:

    function Foo(y){ 
    this.y = y ; 
    } 
    
    Foo.prototype.x = 10; 
    
    Foo.prototype.calculate = function(z){ 
    return this.x+this.y+z; 
    }; 
    
    var b = new Foo(20); 
    
    alert(b.calculate(30)); 

     

     

     

            function person(name, age) {
                this.name = name;
                this.age = age;
    
    
            }
            var ob4 = new person("刘宇", 25);
            alert(ob4.name);
    
            var ob5 = {};
            ob5.__proto__ = person.prototype;
    
            person.call(ob5, "liuyu", 25); //person.apply(ob5,[])参数为数组,更改作用域
            alert(ob5.age);
    
       

      function SetClass(clss) {
                        this.clss = clss;
                    };

    
    

                    var c = new SetClass("大二");

    
    

                    person.prototype = c;
                    var p = new person("liuyu", 25);
                    alert(p.constructor === person);  // false  
                    alert(person.prototype.constructor === person); // false  

    
    

                    alert(person.prototype.constructor === SetClass); // true

    
    

     6,闭包

    闭包的定义非常晦涩——闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落。这些外部执行域的非持久型变量神奇地保留它们在闭包最初定义(或创建)时的值(深连结)。简单来说,闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数的执行完成而销毁。周爱民说得更清楚,闭包就是“属性表”,闭包就是一个数据块,闭包就是一个存放着“Name=Value”的对照表。就这么简单。但是,必须强调,闭包是一个运行期概念。

    在Javascript中闭包(Closure),有两个特点:

    • 作为一个函数变量的一个引用 - 当函数返回时,其处于激活状态。
    • 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

    关于闭包可以看我以前的博文:

     

    7,自执行函数

    自执行函数属于一种特殊的函数,在C#中,我们可能会将常用的功能封装为一个类,或者一个dll,那么在Javascript中其实也可以达到类似的效果,往往我们会给window对象附加一个作用域,或者对象,这个对象上包含我们自定义操作的所有方法,下面是我封装的一个简单的操作:

    (function (window, undefined) {
        window.liuyu = {};
        window.liuyu.getDom = function (id,text) {
    document.getElementById(id).innerHTML = text 
    
    
    
        } 
    
    })(window)
    <div>
    <ul><li id="1"></li> </ul>
    <ul><li id="2"></li> </ul>
    <select>
    <option id="test">1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    </select>
    
    </div>

     调用代码 liuyu.getDom("test", "hello!");

    执行后的效果:

     

     算是耐住性子写完了,写这么一篇花费了不少时间,其实写的目的是记住这些和加深理解,所谓好记性不如烂笔头,最好亲自尝试下,总结是最好的老师,在总结的时候,在用代码模拟的时候可能会有很多意想不到的收获,也可能会有新的疑惑,有疑惑,只要去找,那么一定会有答案,每一次的疑惑都伴随着很多艰辛,只要过了这个,那么自己也就在不知不觉的进步,在东西的时候为了力求准确,可能会不断的搜索材料,为了说明清楚可能会采用不同的方法,什么图文并茂,什么代码示例……,写技术博客不必言情小说那么细腻动人,没有什么妙词佳句,有的时候也很晦涩难懂,但是我尽量将自己的想法和盘托出。写这篇博文看了不少资料,但水平有限,还望批评指正。

     

     

    参考资料:

     

    http://blog.csdn.net/warcraftjimmy/article/details/7559648

     

    http://www.jb51.net/article/30750.htm

     

    http://www.cnblogs.com/longbaobao/articles/2000685.html

     

    http://blog.csdn.net/lidatgb/article/details/7695613

    http://blog.csdn.net/sunqunsunqun/article/details/7718321

     

     

     

    展开全文
  • 一件任务的完成,意味着另外任务的开始,工作就这样,周而复始,就像春夏秋冬一样,四季轮回,其实工作是做,上一个工作任务也许并没有完成,而下一个任务已经有了安排,写代码,搞程序,其实里面有很多东西是...

          一件任务的完成,意味着另外任务的开始,工作就这样,周而复始,就像春夏秋冬一样,四季轮回,其实工作是做不完的,上一个工作任务也许并没有完成,而下一个任务已经有了安排,写代码,搞程序,其实里面有很多东西是不可控制的,一个问题,一个似乎觉得微不足道的问题,可能让人绞尽脑汁,没有源码的帮助,如果是单纯的二次开发,有的时候真不知道问题出在什么地方,我这一段时间就被一个乱码问题折腾的要死,各种编码尝试都不见效果,这叫我如何是好?是我的问题,是程序的bug?

        程序员也要不断的学习,因为你不会知道你的下一个任务是什么,下一个任务是用什么语言,就像年初一样,我也不会知道自己会用JavaScript将写DEMO一样,还好,这么多年的学习以及这么多年的工作让自己有了些博客的“好习惯”,博客的内容可能不是那么的动人,也不可能像电视剧那样有故事情节,扣人心弦,但是却将自己的想法,心得记录下来,去跟同道中人分享,我其实不算一个多产的博主,网络上多产的博主那都是身经百战的大侠,我顶多是班门弄斧,我喜欢看博客,这些大侠的博客往往在告诉一些道理,或者那些容易出错的地方,甚至是一些自己的经验之谈,博客似乎在默默的充当着我们这些网虫交流的平台。

          现在就是想将我学习JavaScript的一些心得记录下来。学习任何东西,都应知道这个东西的应用范畴,如果能了解这个东西的历史背景,那更好不过了,因为任何东西都不是凭空而来,能存活到现在的也可说是历尽千辛万苦,有人说过,存在即合理,也许我们不应该怀疑这句话,我也不算一个职业程序员,那么就用我的愚见说一下自己对学习这个东西的认知。

      任何语言都有自己的数据类型,数据类型决定了如何存储数据以及如何使用数据,比如对String类型的数据如何操作,在JavaScript中数据类型可以从下图看出:

     

     

    2,对象

    JavaScript中的对象其实有种定义方法,可以通过函数,可以通过JSON格式的描述,记住一点JS中的对象是可以动态的添加方法和属性的。

     

    复制代码
    var ob1 = {};
    ob1.name = "liuyu";
    ob1.say = function () {
    
        alert("hello! " + this.name);
    }
    ob1.say();
    
    var ob2 = { name: "liuyu",
        say: function () {
            alert("hello!!" + this.name);
        }
    };
    
    ob2.say();
    
    
    function person(name) {
    
        this.say = function () {
            alert(name);
        };
    
    }
    var ob3 = new person("liuyu");
    
    ob3.say();
    复制代码

     

     

    3,奇怪的this

    在OOP编程中,this这个词语对我们来说简直就是司空见惯,而且含义也很明确就是当前对象,对于C#/Java来说,就是我们new的这个对象,可以用一成不变来描述,但是在JavaScript中,这个This是变化的,可能是指向window对象,也可能是指向非window对象,下面的例子就可以知道:

     

                var x = 1;
    
            function Test() {
    
                this.x = 0;
    
            };
    
            Test();
    
            alert(x);
    
            liuyu.getDom("test", "hello!");
    
            var ob = new Test();
    
            alert(x);
    

     两次分别弹出的数据是0,1,这是为什么呢?原因就出现在this,当直接用Test方法,这this其实指向的就是window对象,当使用new了之后,this就是ob对象,这个是因为在JavaScript语言中有一个作用域的概念,任何一个变量都在自己的作用域内生存,当new了一个对象之后,那么就会在当前作用域对象上产生一个新的作用域。在JavaScript,全局环境本身就一个对象。在浏览器宿主中这个对象是window,而当Javascript用于其它非浏览器的宿主,如嵌入式的环境中,可能会是其它的对象。我们开始定义的变量都是在window这个作用域上的,上面的Test()方法就相当于window.Test(),是在window被省略而已,但是用了new之后,Test就不在是window的了。但是记住一点this始终指向当前的作用域对象。如果说这样还不算很清楚,那我就多说点,JS中对象的生成其实是分了三个步骤:

     

    复制代码
     function person(name, age) {
                this.name = name;
                this.age = age;
    
    
            }
            var ob4 = new person("刘宇",25);
            alert(ob4.name);
    
            var ob5 = {};
            ob5.__proto__ = person.prototype;
            
            person.call(ob5, "liuyu", 25);//person.apply(ob5,[])参数为数组,更改作用域
            alert(ob5.age);
    复制代码

     

     

     

     

    先声明一个对象,ob5,然后将函数的原型赋给对象的内置属性__proto__,然后调用函数的call方法或者apply方法,这个方法就是初始化对象,将函数内部的this指向ob5,或者替换ob5,也就是说如果不用new的时候,函数中的this就是window,而new了之后函数中的this就成了ob5,在JS中this是可以改变的。

     

    4,波粒二象性的函数

    这个波粒二象性应该是物理学中的概念,我牵强的在这里借用下,因为JS中的函数可以充当很多角色,JS中的函数可以充当对象,也可以充当构造函数,甚至可以充当“类”(JS中并没有类的说法),就因为这个函数有很多的角色,我才借用了这个说辞。在Javascript中,函数是Function类的实例,Function间接继承自Object,所以,函数也是一个对象,因此,我们可以用赋值的方法创建函数,当然,我们也可以将一个函数赋给类的一个属性变量,那么,这个属性变量就可以称为方法,因为它是一个可以执行的函数。如下面的例子:

     

     

    复制代码
            function persontest(name) {
                alert(name);
    
    
            };
            persontest("liuyu");
            
    复制代码

     

    复制代码
        function Shape() {
                var z = 8;
                var y = 1;
                this.draw = function () {
                    alert(z);
                };
            };
    
            var ob6 = new Shape();
            ob6.draw();
    复制代码
       var fun1 = function Shape() {
                var z = 8;
                var y = 1;
              alert(z);
            };
            fun1();

     

     

    5,原型

    原型其实是一个对象,原型在JS中并不好理解,还是从例子说起:

    复制代码
    function Person( name, age ){  
    
        this.name = name; 
    
        this.age = age; 
    
    
    
     }  
    
     Person.prototype = {  
    
        getName:function(){ 
    
            return this.name;  
    
        }, 
    
        getAge:function(){ 
    
            returnthis.age;  
    
        } 
    
     }
    
    var ob7 = new Person("liuyu", 25);
    ob7.getName();
    复制代码

    我们发现这个代码居然可以运行成功,但是我们在Person中并没有getName这个方法,代码居然毫无错误,居然有了正确的答案,真是发人深思,这必须归功于原型,每个函数都有一个prototype的属性,这个属性其实一个对象,成为原型对象,当一个对象在已经定义的函数中没找到方法或者属性,那么他就会去这个函数的原型对象中去找,以此类推,直到找到为止。现在分析一下ob7,ob7这个对象内部并没有定义getName方法,但是在Person.prototype这个原型对象中有,所有ob7,就在这个原型对象中找到了,并调用了。原型类似数据机构中的链表指针,指向了下一个对象,之所以能找到这个,还不仅仅如此,这是因为一个对象内部有一个内建的__proto__对象,还记得上面介绍过的对象创建三步骤么?第二部就用到了这个对象。对象的__proto__就是函数的原型对象,那么真正的寻找属性和方法就是依靠这个__proto__对象的,尽管这个对我们来说不可见,但是这是其内部实现原理。 

    复制代码
            function person(name, age) {
                this.name = name;
                this.age = age;
    
    
            }
            var ob4 = new person("刘宇", 25);
            alert(ob4.name);
    
            var ob5 = {};
            ob5.__proto__ = person.prototype;
    
            person.call(ob5, "liuyu", 25); //person.apply(ob5,[])参数为数组,更改作用域
            alert(ob5.age);
    
            alert(person.constructor);
            alert(person.prototype.constructor);
            alert(ob5.constructor);
            alert(person === person.prototype.constructor);
            alert(person === ob5.constructor); //IE和Chrome显示的结果不一样,从已有的知识判断后者是正确的。
    
    
    

     

    复制代码

     上面可能是让人费解的话,下面我们就图文并茂的进行解释和说明:

    var foo = { 
    x: 10, 
    y: 20 
    }; 

     

     

     

    下例中b和c共享a的属性和方法,同时又有自己的私有属性。__proto__默认的也有指向。它指向的是最高级的object.prototype,而object.prototype的__proto__为空。

    复制代码
    var a = { 
    x: 10, 
    calculate: function (z) { 
    return this.x +this.y+  z 
    } 
    }; 
    var b = { 
    y: 20, 
    __proto__: a 
    }; 
    
    var c = { 
    y: 30, 
    __proto__: a 
    }; 
    
    // call the inherited method 
    b.calculate(30); // 60 
    复制代码

     

    理解了__proto__这个属性链接指针的本质,我们可以继续深入创建对象的函数我们称之为构造函数,这个和其它语言无异,constructor始终指向创建当前对象的构造(初始化)函数。每个函数都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数,一个对象比如说ob5之所以有constructor这个属性,那是因为这个constructor是在原型对象上的,看下面的例子:

    复制代码
    function Foo(y){ 
    this.y = y ; 
    } 
    
    Foo.prototype.x = 10; 
    
    Foo.prototype.calculate = function(z){ 
    return this.x+this.y+z; 
    }; 
    
    var b = new Foo(20); 
    
    alert(b.calculate(30)); 
    复制代码

     

     

     

    复制代码
            function person(name, age) {
                this.name = name;
                this.age = age;
    
    
            }
            var ob4 = new person("刘宇", 25);
            alert(ob4.name);
    
            var ob5 = {};
            ob5.__proto__ = person.prototype;
    
            person.call(ob5, "liuyu", 25); //person.apply(ob5,[])参数为数组,更改作用域
            alert(ob5.age);
    
       
    
    

      function SetClass(clss) {
                        this.clss = clss;
                    };

    
    

                    var c = new SetClass("大二");

    
    

                    person.prototype = c;
                    var p = new person("liuyu", 25);
                    alert(p.constructor === person);  // false   
                    alert(person.prototype.constructor === person); // false  

    
    

                    alert(person.prototype.constructor === SetClass); // true

    
    
    复制代码

     6,闭包

    闭包的定义非常晦涩——闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落。这些外部执行域的非持久型变量神奇地保留它们在闭包最初定义(或创建)时的值(深连结)。简单来说,闭包就是在另一个作用域中保存了一份它从上一级函数或作用域取得的变量(键值对),而这些键值对是不会随上一级函数的执行完成而销毁。周爱民说得更清楚,闭包就是“属性表”,闭包就是一个数据块,闭包就是一个存放着“Name=Value”的对照表。就这么简单。但是,必须强调,闭包是一个运行期概念。

    在Javascript中闭包(Closure),有两个特点:

    • 作为一个函数变量的一个引用 - 当函数返回时,其处于激活状态。
    • 一个闭包就是当一个函数返回时,一个没有释放资源的栈区。

    关于闭包可以看我以前的博文:

     

    7,自执行函数

    自执行函数属于一种特殊的函数,在C#中,我们可能会将常用的功能封装为一个类,或者一个dll,那么在Javascript中其实也可以达到类似的效果,往往我们会给window对象附加一个作用域,或者对象,这个对象上包含我们自定义操作的所有方法,下面是我封装的一个简单的操作:

    复制代码
    (function (window, undefined) {
        window.liuyu = {};
        window.liuyu.getDom = function (id,text) {
    document.getElementById(id).innerHTML = text 
    
    
    
        } 
    
    })(window)
    复制代码
    复制代码
    <div>
    <ul><li id="1"></li> </ul>
    <ul><li id="2"></li> </ul>
    <select>
    <option id="test">1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    </select>
    
    </div>
    复制代码

     调用代码 liuyu.getDom("test", "hello!");

    执行后的效果:

     

     算是耐住性子写完了,写这么一篇花费了不少时间,其实写的目的是记住这些和加深理解,所谓好记性不如烂笔头,最好亲自尝试下,总结是最好的老师,在总结的时候,在用代码模拟的时候可能会有很多意想不到的收获,也可能会有新的疑惑,有疑惑,只要去找,那么一定会有答案,每一次的疑惑都伴随着很多艰辛,只要过了这个,那么自己也就在不知不觉的进步,在东西的时候为了力求准确,可能会不断的搜索材料,为了说明清楚可能会采用不同的方法,什么图文并茂,什么代码示例……,写技术博客不必言情小说那么细腻动人,没有什么妙词佳句,有的时候也很晦涩难懂,但是我尽量将自己的想法和盘托出。写这篇博文看了不少资料,但水平有限,还望批评指正。

    展开全文
  • “我和你们说,这个村长有多离谱,他要我去打火焰狼,火焰狼啊TM的,二十级的...然后得知这个新手村里有一个该千刀万剐的村长,给他们的任务非常奇怪,几乎不可能完成。 但是不完成任务,就没有奖励,更别说解锁下一.

    在这里插入图片描述

    “我和你们说,这个村长有多离谱,他要我去打火焰狼,火焰狼啊TM的,二十级的怪物。”

    “你这算好的,他给我的任务是去村口的水洞找遗失的戒指,特么那个水洞也不知道有多深,找一个小小的戒指,这合理吗?”

    “我只有打败深渊鼠人才能领下一个任务。”

    嘶……

    几道吸气的声音响起。

    这类现象频繁出现在村口,让许许多多新来的冒险者感到非常好奇。

    那些新的玩家去询问这些抱怨的人,为什么要唉声叹气。

    然后得知这个新手村里有一个该千刀万剐的村长,给他们的任务非常奇怪,几乎不可能完成。

    但是不完成任务,就没有奖励,更别说解锁下一个任务。

    二三十级了还在新手村子里待着的玩家多得是。

    他们不是不愿意离开村子,而是他们离不开,他们没有前往下一个城池的权限。

    只有完成村长的任务,得到村长的许可才能进入下一个城池,而村长的任务基本上不可能完成。

    于是,这个游戏就进入了死循环。

    谁敢想象,小小的新手村里竟然积累了几十万人,不是在做任务就是在做任务的路上。

    “村长该死!”

    这声咒骂几乎天天都会响起,但是很遗憾,村长只是游戏NPC,玩家无法对村长造成伤害。

    “阿嚏!”

    新手村中央的冒险者公会,在这个公会旁边有一个略显豪华的二层小洋楼。

    在二楼阳台,有一个穿着长袍的年轻人打了个喷嚏。

    “又是哪个挨千刀的家伙在诅咒我了。”

    林乐挠了挠头,这是他成为新手村村长的第十五天。

    别人进游戏当玩家,当冒险者。

    他一进游戏,莫名其妙成为了新手村的村长。

    而且还得到了一个奇怪的系统。

    只要冒险者做任务失败,他就能从获得奖励。

    奖励为冒险者要做的任务的一半奖励。

    于是,林乐把新手任务全部换成了高级任务。

    击杀一只深渊鼠人可以获得地心精矿石两块,而只要玩家击杀深渊鼠人失败,他就可以获得一半的奖励,也就是一块地心精矿石。

    所以,大量玩家被困在新手村出不去,实际上都是林乐的杰作。

    完成任务?完成什么任务,不经历一点挫折,你也敢说自己是冒险者?

    当然,这个一点挫折对于玩家们来说,应该是亿点挫折。

    林乐看了一下时间,该工作了。

    他下楼去,搬了个小凳子坐在冒险者公会门口一旁。

    新来的玩家都会在公会注册自己冒险者名片,确定自己的职业,然后来他这里领任务。

    林乐刚坐下没多久,还来不及看几眼来来往往的女性冒险者的大腿,就被两个身子挡住了视线。

    林乐抬头看去,这是两个新人冒险者,手中拿着刚刚注册的卡片。

    “咳咳,勇敢的冒险者,欢迎来到新手村,我是村长,这个世界处处充满了危险,稍不小心,就会死亡。”

    林乐开始了自己的经典开场白,每个冒险者,他都这么说。

    “卧槽?这就是村长?我以为是个老头。”

    “我也以为是个糟老头子。”

    “仔细一看,好像比你帅啊。”

    “拉倒吧,我比他帅多了。”

    林乐咳嗽了一声,张开双手。

    “总之,勇敢的冒险者,请努力变强,在魔王和魔物的手下保护这个世界吧!”

    一番热血的话点燃了两个冒险者的热血。

    “好的村长,请告诉我们第一个任务吧。”

    其中一个冒险者说道。

    林乐满意地点点头,“既然是新人玩家,也不好为难别人,你们去打爆火爆袋鼠,拿回火爆袋鼠的拳套就行了。”

    “好,出发!”

    看着两个冒险者勾肩搭背,斗志昂扬地走远。

    林乐颇为感慨地靠在了身后的公会墙上,多好的两个年轻人啊,热血,洋溢着青春,即将挥洒汗水。

    颇有当初他练级时候的影子,既然如此,让他们两个LV.1的玩家去打LV.30的怪物是不是有点过分了啊?

    算了,反正现在叫他们也来不及了。

    “哟,早啊,挨千刀的村长,你又在坑萌新吧。”

    “早啊,美丽的水之精灵,我只是引导两个热血的年轻人踏上征程。”

    林乐看向声音传来的地方,一个穿着水蓝色法师袍的金发女人走来。

    这是个种族为精灵的法师,当然也是玩家,林乐从她身上捞到了不少好处。

    “村长,我这次来是拜托你给我一个简单一点任务,我已经在新手村被困了十天了。”

    水属性的精灵法师玩家叫做黛蓝儿,自从在新手村越呆越久,她的志向也在逐渐变化。

    从最初的打败魔王,变成打败魔王干部,再变成成功出村,最后到了现在,她的目标只有一个,先完成一个任务!

    “现在这块大陆生灵涂炭,你也不希望魔王和他的部下到处烧杀抢掠吧。”

    “我作为勇者,我得保护这个世界,所以村长,请务必给我一个简单简单,再简单的任务!”

    黛蓝儿紧紧握着林乐的手,眼里满是真诚。

    “那就先定个小目标,先杀个深渊鼠人吧。”

    展开全文
  • 在孩子成长中一定会出现的物件里,拼图占有一席之地。小小的拼图,不管是家中还是幼儿园,...面对这个简直不可能完成的任务,岳云鹏坦言差点流泪。求孩子内心阴影面积“当我闺女看见这三万多块拼图的时候……我大...
  • Java(新增成功)

    2019-06-08 09:49:05
    1、在JAVA中刚开始做新增时候,经常会因为自己一个小小的疏忽,就写错新增语句,也有可能是获取到值,这些都会犯错。 2、首先,我们新增时候第一步应该创建需要新增那张表po实体类,然后在Dao写一个...
  • 对于上班族来讲,每天工作时间大多数都是八小时,在面对繁重工作任务时,如果能合理安排这八小时工作时间,很容易在下班时工作任务还未完成;因此为了提高工作效率,同时确保在工作时间内完成工作任务,...
  • 事实上,计算机用户想要完成的任何任务都能找到高质量的F/OSS软件来完成,从文字处理到提供上网服务,等等。可是,这个软件阵营的大部分成员,都有那么一个小小的问题:它们实在可以再好用得多。专业的UI设计师告诉...
  • 知道是因为什么,可能是因为上了初三,学习生活紧张的缘故,我的信息学好像一直都在状态。 ...还有初一初二的贪玩习惯:总是会把当前应当完成的任务推到以后去做,例如会经常想:“这个作业...
  • 完善的项目管理计划,会涵盖项目发展过程中需要的所有细节。这个计划就好比一张地图,有了它,你就能按照既定的路线朝目标前进,但是...2、项目管理计划应该详细地说团队要完成的所有任务,可能需要执行的任务。 3、
  • 大Boss布置了一个任务给小L,作为一个小小的管理者,小L不可能自己独立完成,而需要手下人一起完成。小L手下人很多也很杂,大家进公司时间有长有短,工种各有差异,学历也各不相同。为了节约时间,一个e-mail...
  • 游戏开发一些小结

    2012-01-14 18:36:16
    很久没写些什么了,一起聊下游戏吧,虽然经验多,当作一次小小的总结吧。  首先总结一下游戏结构。  抛开游戏框架、设计思路、游戏策划,大部分包含等角地图游戏都需要以下几部分:时间管理、用户管理、弹窗...
  • 小小改进一枚,用了N久时间调研和N久时间搭框架.由于该项任务优先级高(其实非常低~_~!),前前后后用了近5个月才完成.网上关于安卓自动化测试工具和文章少可怜,而且大部分工具非常坑爹,一些已经成型工具现在...
  • 数学建模依我见

    2020-08-09 18:46:12
    3缺一不可能完成高质量论文 比喻:基本盘,锦上添花,核心。 本人目前大三,总共参加大大小小的数学建模5,6次左右,所以有一些心得想跟大家分享。 首先是一般队伍容易凡错误: 1.盲目选题,在正式比赛中选择...
  • 在本机配置好开机启动选项,保存后在另一台机器上运行软件,可能会受到瑞星、江民等含有注册表监控杀软阻止,请点击“允许”。 C.请勿在他人知道情况下安装本软件! 【注册费】 每套:¥20 元 【联系方式】 QQ...
  • 你必须知道495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    如果我将指针值设为0,编译器可能会自动将它转换为非零空指针内部表示。 5.20运行时“nullpointerassignment”错误是什么意思?应该怎样捕捉它? 第6章 数组和指针 数组和指针基本关系 6.1 我在一个...
  • 每天在规定时间上下班,上班期间 要认真准时地完成自己工作任务能草率敷衍了事。我们肩上开始扛着责任,凡事得谨慎小心,否则随时可能要为一个小小的错误承而负责。 我在实习过程中有不少收获,实习...
  • 每天在规定时间上下班,上班期间要认真准时地完成自己工作任务能草率敷衍了事。我们肩上开始扛着民事责任,凡事得谨慎小心,否则随时可能要为一个小小的错误承担严重后果付出巨大代价,再也不是一句...
  • 收款员年度工作总结 收款员年度工作总结 在人们眼中收款室工作相对于其他科室可能简单了许多,似乎既需要很高技术含量,也不必承担性命之托巨大压力。然而,工作以来亲身经历使我深深体会到,“科室工作...
  • 如果我将指针值设为0,编译器可能会自动将它转换为非零空指针内部表示。 62  5.20 运行时“null pointer assignment”错误是什么意思?应该怎样捕捉它? 62 第6章 数组和指针 63 数组和指针基本关系 ...
  • 《你必须知道495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    你难免会遇到各种各样问题,有些可能让你百思不得其解,甚至翻遍图书馆,也找到问题答案。 《你必须知道495个C语言问题》出版填补了这一空白。许多知识点阐述都是其他资料中所没有,弥足珍贵。 涵盖...
  • 本项目初衷之一是比对、共享各种文本纠错方法,抛砖引玉作用,如果对大家在文本纠错任务上有一点小小的启发就是我莫大荣幸了。 主要使用了多种深度模型应用于文本纠错任务,分别是前面模型小节介绍seq2seq、...

空空如也

空空如也

1 2 3
收藏数 51
精华内容 20
关键字:

不可能完成的任务小小