zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

js知识点

2023-02-18 16:29:09 时间

javascript

01.JavaScript-闭包

有权访问另一个函数作用域内变量的函数都是闭包

var person = function(){
    var name = "default";
    return {
        getName:function(){
            return name;
        },
        setName:function(NewName){
            name = NewName;
        }
    }
}();
print(person.name); //undefined
print(person.getName); //"default"
person.setName("weizai");
print(person.name); //"weizai"

02.JavaScript-原型和原型链

对于所有的对象,都有__proto__属性,这个属性对应该对象的原型.
对于函数对象,除了__proto__属性之外,还有prototype属性,当一个函数被用作构造函数来创建实例时,该函数的prototype属性值将被作为原型赋值给所有对象实例(也就是设置实例的__proto__属性)
1.原型对象
js中 函数对象其中一个属性 原型对象prototype。p普通对象没有prototype属性 有__proto__ 。 原型的作用是给这个类的每一个对象都添加一个统一的方法。在原型中定义的方法和属性都是被所有对象实例共享

var persion = function(name){
    this.name = name
};
person.prototype.getName = function(){
    //设置函数对象属性
    return this.name;
}
var zxj = new person('test');
zxj.getName(); //zxj继承getName属性

2.原型
proto : js创建对象的内置属性 用于指向创建它的函数对象prototype
(js内部使用寻找原型链的属性。实例化一个对象时,内部会创建一个__proto__属性并把prototype赋值给它)

下图为原型链运行图解,当我们实例一个对象之后,调用它的内部方法,
他的运行顺序是先找自身有没有该方法,如果没有就会通过__proto__属性想上层寻找,一直寻找到Object对象中,如果还没有才会报错null
p.proto----->Persion.proto---->object.proto----->null

03.JavaScript-作用域和作用域链

  1. 全局作用域(Global Scope)

1.最外层函数和在最外层函数外面定义的变量拥有全局作用域

var authorName="山边小溪";
function doSomething(){
    var blogName="梦想天空";
    function innerSay(){
        alert(blogName);
    }
    innerSay();
}
alert(authorName); //山边小溪
alert(blogName); //脚本错误
doSomething(); //梦想天空
innerSay() //脚本错误

2.所有末定义直接赋值的变量自动声明为拥有全局作用域

function doSomething(){
    var authorName="山边小溪";
    blogName="梦想天空";
    alert(authorName);
}
doSomething(); //山边小溪
alert(blogName); //梦想天空
alert(authorName); //脚本错误

3.所有window对象的属性拥有全局作用域
window.name、window.location、window.top

  1. 局部作用域(Local Scope) 
    和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域,例如下列代码中的blogName和函数innerSay都只拥有局部作用域。
function doSomething(){
    var blogName="梦想天空";
    function innerSay(){
        alert(blogName);
    }
    innerSay();
}
alert(blogName); //脚本错误
innerSay(); //脚本错误

在编写代码的时候应尽量少使用全局变量,尽可能使用局部变量。一个好的经验法则是:如果一个跨作用域的对象被引用了一次以上,则先把它存储到局部变量里再使用

04.JavaScript-执行流与错误影响范围

05.JavaScript-基础重点

06.JavaScript-类型转换

07.JavaScript-call-apply
call 调用一个对象的一个方法,以另一个对象替换当前对象
apply 应用某一对象的一个方法,用另一个对象替换当前对象。

08.JavaScript-事件和事件委托