发表于: 2017-02-27 22:50:07

1 1223


一、今天完成的事情:

1.修改了今天demo中出现的bug;


2.看了高程,加深了对构造函数和闭包的认识;


二、明天要做的事情:

1.继续补基础;


2.再次demo;


三、遇到的问题:

1.用匿名函数来模仿块级作用域,避免前面使用了变量,后面声明变量之后变量还是会不变,
2.变量只不过是值的另一种表现形式,所以用实际的值来替换变量并没有问题。
3.将函数声明直接转换为表达式,可以用这个方法来让它拥有块级作用域,在这个函数中的所有变量都会在它完成的时候被全部销毁,这个原理是因为没有指向匿名函数的引用,所以在函数执行完毕的时候就会自动销毁作用域链了。
4.私有变量:只有函数内部可以访问到的变量称为私有变量
5.特权方法:有权访问私有变量和私有函数的公有方法称为特权方法,有两种方法来创建特权方法:第一种,在构造函数中定义特权方法:
function myObject() {
    var value 100;
    function privateFn() {
        return false;
    };
    this.publicMethod function () {
        value++;
        return privateFn()
    }
}
在上面这个例子中,value和privatefn都值能通过里面的pulicmethod来进行访问,除此之外没有任何方法来访问它们。我们利用这个方法可以来隐藏那些不应该被修改的数据。
   'use strict';
 function Person(name) {
     this.setName function (value) {
         name value;
     }
     this.getName function () {
         console.log(name)
         return name
     }
 }
var nike = new Person('nike');
 nike.getName();
 nike.setName('Frank');
 nike.getName();
在这个例子中,我们可以想象成在此函数我们先var name = name  前面的name是这个函数的私有变量,后面是我们传入的值,setname会改变name,getname会将这个name值传出
在Person构造函数中,getName和setName是它的特权方法,我们上面提到的想象出的name变量是它的私有变量,但是我们使用构造函数来建立特权方法有一个弊端——每个实例都会创建同样的一组新方法。我们使用静态私有变量的特权方法即可解决这个问题:
(function () {
   var name '';
    Myobject function (value) {
        name value
    };
    Myobject.prototype.getNmae function () {
        return name;
    };
    Myobject.prototype.setName function (value) {
        name value;
    }
})()
var person1 = new Myobject('Frank');
console.log(person1.getNmae());
person1.setName('nike');
console.log(person1.getNmae());
var person2 = new Myobject('Lina');
console.log(person2.getNmae());
代码如上所述,我们先创建了一个私有作用域(块级作用域),在这个作用域中,有一个私有静态变量name,特别注意我在下面声明了一个Myobject构造函数,然后再这个构造函数的原型链中写了两个方法。其他都跟我们上一个例子一样,这又引出了我的思考,this和prototype来做的区别到底是什么,



返回列表 返回列表
评论

    分享到