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

JavaScript深入浅出

Bosn 资深架构师
难度中级
时长 5小时28分
学习人数
综合评分9.60
492人评价 查看评价
9.8 内容实用
9.5 简洁易懂
9.5 逻辑清晰
  • 实现继承的方式:

    function Person(){}

    function Student(){}

    1.Student.prototype=Person.prototype;//别用

    2.Student.prototype=new Person();//在有参数时不是很好用

    3.Student.prototype=Object.create(Person.prototype);//较为理想,ES5之后才能用,为了兼容,可以用下图方法:

    https://img1.sycdn.imooc.com//5cd902cc0001031202120118.jpg

    Student.prototype.constructor=Person;

    https://img1.sycdn.imooc.com//5cd903730001742213660768.jpg

    查看全部
  • instanceof:左对象右函数构造器(又必须为函数不然报错),判断左边的对象的原型链上有没有右边的构造器的prototype。

    不同而window或iframe间的对象类型检测不能使用instanceof!

    查看全部
    0 采集 收起 来源:instanceof

    2019-05-13

  • var obj = {x:1};

    obj.__proto__;//Object{}

    Object.getPrototypeOf(obj);//获取obj的原型,Object{}

    Object.getPrototypeOf(obj)===Object.prototype;//true

    function foo(){}

    foo.prototype.__proto__;//Object{}

    foo.prototype.__proto__===Object.prototype;//true

    obj.toString();//"[object Object]"

    object.valueOf();//Object{x:1}

    不是所有的对象的原型链上独有Object.prototype

    var obj2 = Object.create(null);//这个就没有,这是创建了一个空对象,并且这个对象的原型指向null

    也并不是所有的函数对象都会有prototype这个属性

    function abc(){};

    var binded = abc.bind(null);

    typeof binded;//"function"

    binded.prototype;//undefined,binded就没有prototype属性。


    查看全部
    1 采集 收起 来源:再谈原型链

    2019-05-13

  • 改变prototype:如果是针对某个对象的修改,会改变已经实例化的对象的属性,但是如果是字面量赋值给prototype,却不会印象已经实例化的对象,但会印象后续实例化的对象。如下图:

    https://img1.sycdn.imooc.com//5cd8f8cc0001b3f804330219.jpghttps://img1.sycdn.imooc.com//5cd8fa600001a4b903210348.jpg

    https://img1.sycdn.imooc.com//5cd8fa7c0001b5fc02240319.jpg

    查看全部
    0 采集 收起 来源:prototype属性

    2019-05-13

  • 构造函数有个内置属性name,是不可改写的.实例化的对象没有内置属性name

    对象的prototype属性的constructor属性可判断对象的原型是谁,还可以用实例化的obj的constructor属性来实例化新的对象。

    查看全部
    0 采集 收起 来源:再谈原型链

    2019-05-13

  • Object.create =  function (o) {    var F = function () {};    F.prototype = o;    return new F(); };


    new 法实际执行的代码:

    var o1 = new Object(); o1.[[Prototype]] = Base.prototype; Base.call(o1);

    查看全部
  • function Person(name,age){

        this.name = name;

    this.age = age;//不在Person的prototype对象属性上!!!

    //当var newPerson=new Person();时,this指向newPerson。同时newPerson可以直接访问Person上的属性和方法,但Person得Peson.prototype.method()访问!!

    Person.prototype.hi = function(){

    document.write("Hi,my name is "+this.name+".I'm "+this.age+"years old now.");

    };

    Person.prototype.LEGS_NUM = 2;

    Person.prototype.ARMS_NUM = 2;

    Person.prototype.walk = function(){

    document.write(this.name+"is working.");

    };

    //以上两个方法和两个属性都是加在Person的prototype上的,为了继承!!!

    function Student(name,age,className){

         Person.call(this,name,age);//this为Student

    this.className = className;

    }

    Student.prototype = Object.create(Person.prototype);//Object.create创建一个空对象,并且这个对象的原型指向Object.create的参数。

    //上面一句不能Student.prototype = Person.prototype;

    //不然会导致修改Student.prototype修改时,Person.prototype也改了

    //也不能new Person给Student,因为new出来的都是对像,而Student是函数,有自己的参数,可以把Person看为父对象函数,Student为子对象函数

       

    Student.prototype.constructor = Student;//不设置时,consrtuctor会指向Person

    Student.prototype.hi = function(){

       document.write("Hi,my name is "+this.name+".I'm "+this.age+"years old now,and from "+this.className+".");

    };//会覆盖Person.prototype的hi方法(因为之下而上的访问顺序)

    Student.prototype.learn = function(subject){

    document.write(this.name + " is learning " + subject + " at " +this.className + ".");

    };


    //test

    var bosn =new Student("Bosn",27,"Class 3,Grade 2");

    bosn.hi();

    bosn.LEGS_NUM;

    bosn.walk();

    bosn.learn('math');

    function Person(name,age){

        this.name = name;

    this.age = age;//不在Person的prototype对象属性上!!!

    //当var newPerson=new Person();时,this指向newPerson。同时newPerson可以直接访问Person上的属性和方法,但Person得Peson.prototype.method()访问!!

    Person.prototype.hi = function(){

    document.write("Hi,my name is "+this.name+".I'm "+this.age+"years old now.");

    };

    Person.prototype.LEGS_NUM = 2;

    Person.prototype.ARMS_NUM = 2;

    Person.prototype.walk = function(){

    document.write(this.name+"is working.");

    };

    //以上两个方法和两个属性都是加在Person的prototype上的,为了继承!!!

    function Student(name,age,className){

         Person.call(this,name,age);//this为Student

    this.className = className;

    }

    Student.prototype = Object.create(Person.prototype);//Object.create创建一个空对象,并且这个对象的原型指向Object.create的参数。

    //上面一句不能Student.prototype = Person.prototype;

    //不然会导致修改Student.prototype修改时,Person.prototype也改了

    Student.prototype.constructor = Student;//不设置时,consrtuctor会指向Person

    Student.prototype.hi = function(){

       document.write("Hi,my name is "+this.name+".I'm "+this.age+"years old now,and from "+this.className+".");

    };//会覆盖Person.prototype的hi方法(因为之下而上的访问顺序)

    Student.prototype.learn = function(subject){

    document.write(this.name + " is learning " + subject + " at " +this.className + ".");

    };


    //test

    var bosn =new Student("Bosn",27,"Class 3,Grade 2");

    bosn.hi();

    bosn.LEGS_NUM;

    bosn.walk();

    bosn.learn('math');

    function Person(name,age){

        this.name = name;

    this.age = age;//不在Person的prototype对象属性上!!!

    //当var newPerson=new Person();时,this指向newPerson。同时newPerson可以直接访问Person上的属性和方法,但Person得Peson.prototype.method()访问!!

    Person.prototype.hi = function(){

    document.write("Hi,my name is "+this.name+".I'm "+this.age+"years old now.");

    };

    Person.prototype.LEGS_NUM = 2;

    Person.prototype.ARMS_NUM = 2;

    Person.prototype.walk = function(){

    document.write(this.name+"is working.");

    };

    //以上两个方法和两个属性都是加在Person的prototype上的,为了继承!!!

    function Student(name,age,className){

         Person.call(this,name,age);//this为Student

    this.className = className;

    }

    Student.prototype = Object.create(Person.prototype);//Object.create创建一个空对象,并且这个对象的原型指向Object.create的参数。

    //上面一句不能Student.prototype = Person.prototype;

    //不然会导致修改Student.prototype修改时,Person.prototype也改了

    Student.prototype.constructor = Student;//不设置时,consrtuctor会指向Person

    Student.prototype.hi = function(){

       document.write("Hi,my name is "+this.name+".I'm "+this.age+"years old now,and from "+this.className+".");

    };//会覆盖Person.prototype的hi方法(因为之下而上的访问顺序)

    Student.prototype.learn = function(subject){

    document.write(this.name + " is learning " + subject + " at " +this.className + ".");

    };


    //test

    var bosn =new Student("Bosn",27,"Class 3,Grade 2");

    bosn.hi();

    bosn.LEGS_NUM;

    bosn.walk();

    bosn.learn('math');


    查看全部
    1 采集 收起 来源:概念与继承

    2019-05-13

  • 使用对象字面量创建原型方法,会重写原型链,要小心!

    基于原型的继承

    https://img1.sycdn.imooc.com//5cd83527000147fa04510297.jpg

    https://img1.sycdn.imooc.com//5cd8353900011bcd04960442.jpghttps://img1.sycdn.imooc.com//5cd83552000120b604830179.jpg

    查看全部
    0 采集 收起 来源:概念与继承

    2019-05-13

  • 面向对象程序设计(Object-oriented programming,OOP)是一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性

    (继承        封装           多态        抽象)

    查看全部
    0 采集 收起 来源:概念与继承

    2019-05-12

  • Function是特殊的对象,五种原始类型一种对象

    查看全部
  • 函数数组日期都是对象类型的

    查看全部
  • 原始类型外是对象类型

    查看全部
  • 数据常见类型

    查看全部
  • 常用数据类型

    查看全部
  • 数字运算 字符串拼接  字符串隐式转化数字

    查看全部

举报

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

微信扫码,参与3人拼团

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

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