为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
492人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 我爱学习
    查看全部
  • nice
    查看全部
  • 另外一种对象创建的方法:Object.create,这里创建的对象属性是原型上的,其实例本身没有

    查看全部
  • 原型链,new一个函数对象,这个函数对象中的属性就相当于基类的属性,可被子类继承

    查看全部
  • 类型检测小结

    查看全部
  • 。有序 弱类型

    。[, , ]//undefined *2

    。delete删除元素后,长度不变,改为undefined

    。for(i in array),不保证顺序,会迭代原型链上的属性,

    查看全部
  • 。属性检测  “legs”in cat;//true

    。Object.defineProperty方法 添加属性并定义其标签

    。语句+隐式转换+运算符  

    查看全部
  • 。对象有prototype属性,函数是对象,通过构造函数创建对象时,所创建对象会继承构造函数的prototype属性,构造函数的prototype继承Object。形成原型链。

    。添加与prototype相同的属性,查找时会被覆盖,但原型链属性不会修改

    。var obj = Object.create({x:1});//创建继承自Object的对象,向其原型链添加x:1属性

    。var obj = Object.create(null);//原型为null

    查看全部
  • 。对象 属性无序;key是字符串

    。属性可动态添加/删除

    查看全部
  • 闭包就是能够读取其他函数内部变量的函数。

    查看全部
  • Javascript中arguments对象的详解与使用方法

    一、arguments使用方法

    通过方括号语法访问每一个元素



    var fun = function(one) { 

    console.log(arguments[0]); 

    console.log(arguments[1]); 

    console.log(arguments[2]);}

    fun(1, 2, 3)// 1// 2// 3

    通过length属性,查看到底要几个参数



    function fun() {

    return arguments.length;}

    fun(1, 2, 3) // 3

    fun(1) // 1

    fun() // 0

    参数赋值(“严格模式下不允许”)


    var fun = function(a, b) {

    arguments[1] = 2; 

    return a + b;}

    fun(1, 1)// 3

    二、arguments与数组的关系

    虽然arguments可以使用中括号语法,并且具有length属性,但arguments对象只是与数组类似,并不是Array的实例。因此,无法对 arguments 变量使用标准的数组方法,比如 push, pop 或者 slice。 虽然使用 for 循环遍历也是可以的,但是为了更好的使用数组方法,最好把它转化为一个真正的数组。

    如何使用数组方法?

    通过apply方法,把arguments作为参数传进去,这样就可以让arguments使用数组方法了。

    1234

    // 用于apply方

    myFunction.apply(obj, arguments).// 使用与另一个数组合并

    Array.prototype.concat.apply([1,2,3], arguments)

    终极解决方法,直接转为真正的数组

    下面的代码将会创建一个新的数组,包含所有 arguments 对象中的元素。



    var args = Array.prototype.slice.call(arguments);

    //或者

    var args = [];

    for (var i = 0; i < arguments.length; i++) { 

    args.push(arguments[i]);}

    //或者

    var args = [].slice.call(arguments, 0);

    三、强大却不建议使用的callee属性

    arguments的callee属性可以调用函数本身,当函数正在执行时才可调用,可以实现方法的递归调用

    下面的代码将会实现一个求阶乘方法


    var factorial = function(x){

     return x<=1?1:x*arguments.callee(x-1);}

    在ECMAScript5严格模式中,对这个属性的读写操作会产生一个类型错误,并且会显著的影响现代 JavaScript 引擎的性能,所以,因此强烈建议大家不要使用 arguments.callee 和它的属性


    查看全部
  • this()方法和apply()方法的区别:

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法。

    2. 相同点:这两个方法的作用是一样的。

    都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。

    一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向。

    call()方法使用示例:

        //例1
        <script>
            window.color = 'red';
            document.color = 'yellow';        var s1 = {color: 'blue' };        function changeColor(){
                console.log(this.color);
            }
    
            changeColor.call();         //red (默认传递参数)
            changeColor.call(window);   //red
            changeColor.call(document); //yellow
            changeColor.call(this);     //red
            changeColor.call(s1);       //blue
    
        </script>    //例2
        var Pet = {
            words : '...',
            speak : function (say) {
                console.log(say + ''+ this.words)
            }
        }
        Pet.speak('Speak'); // 结果:Speak...
    
        var Dog = {
            words:'Wang'
        }    //将this的指向改变成了Dog
        Pet.speak.call(Dog, 'Speak'); //结果: SpeakWang1234567891011121314151617181920212223242526272829303132333435

    apply()方法使用示例:

        //例1
        <script>
            window.number = 'one';
            document.number = 'two';        var s1 = {number: 'three' };        function changeColor(){
                console.log(this.number);
            }
    
            changeColor.apply();         //one (默认传参)
            changeColor.apply(window);   //one
            changeColor.apply(document); //two
            changeColor.apply(this);     //one
            changeColor.apply(s1);       //three

    3. 不同点:接收参数的方式不同。

    • apply()方法 接收两个参数,一个是函数运行的作用域(this),另一个是参数数组

    语法:apply([thisObj [,argArray] ]);,调用一个对象的一个方法,2另一个对象替换当前对象。

    说明:如果argArray不是一个有效数组或不是arguments对象,那么将导致一个 TypeError,如果没有提供argArray和thisObj任何一个参数,那么Global对象将用作thisObj。如果第一个参数不是对象的话,该方法会自动将第一个参数封装成相对应的对象。

    而call()方法 第一个参数和apply()方法的一样,但是传递给函数的参数必须列举出来。

    语法:call([thisObject[,arg1 [,arg2 [,...,argn]]]]);,应用某一对象的一个方法,用另一个对象替换当前对象。

    说明: call方法可以用来代替另一个对象调用一个方法,call方法可以将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象,如果没有提供thisObj参数,那么Global对象被用于thisObj。如果第一个参数不是对象的话,该方法会自动将第一个参数封装成相对应的对象。

    使用示例1:

        function add(c,d){
            return this.a + this.b + c + d;
        }    var s = {a:1, b:2};
        console.log(add.call(s,3,4)); // 1+2+3+4 = 10
        console.log(add.apply(s,[5,6])); // 1+2+5+6 = 14 1234567

    使用示例2:

        <script>
            window.firstName = "Cynthia"; 
            window.lastName = "_xie";        var myObject = {firstName:'my', lastName:'Object'};        function getName(){
                console.log(this.firstName + this.lastName);
            }        function getMessage(sex,age){
                console.log(this.firstName + this.lastName + " 性别: " + sex + " age: " + age );
            }
    
            getName.call(window); // Cynthia_xie
            getName.call(myObject); // myObject
    
            getName.apply(window); // Cynthia_xie
            getName.apply(myObject);// myObject
    
            getMessage.call(window,"女",21); //Cynthia_xie 性别: 女 age: 21
            getMessage.apply(window,["女",21]); // Cynthia_xie 性别: 女 age: 21
    
            getMessage.call(myObject,"未知",22); //myObject 性别: 未知 age: 22
            getMessage.apply(myObject,["未知",22]); // myObject 性别: 未知 age: 22
    
        </script>


    查看全部
    0 采集 收起 来源:[JavaScript]this

    2018-05-31

  • 。typeof 函数对象和基本类型,返回对应类型的字符串

    。obj instanceof Object 左边对象的原型链上是否含有右边构造函数的prototype属性。按原型链查找。

    。不同的window和iframe不嫩能使用instanceof

    查看全部
  • 。把基本类型(str,num,boolean)作为对象使用时,js会把其转换为对应的包装类型对象,返回值后会将临时对象销毁

    查看全部
  • == 需隐式转换

    查看全部

举报

0/150
提交
取消
课程须知
1.您至少学习了本站“JS入门”、“JS进阶”两门基础课程。 2.如您具备一定实践经验对学习有很大帮助。 3.如您没有脚本编程开发经验,学习过程有可能会受挫部分内容或示例代码,请“暂时略过不懂的部分,后面章节会阐述”,当然想透彻学习,还需大量实践来体会知识的内涵。
老师告诉你能学到什么?
结合实例,深入解析以下知识内容: 1. 数据类型、表达式和运算符、语句; 2. 对象、数组、变量、函数; 3. this、闭包和作用域; 4. OOP; 5. 正则与模式匹配。

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!