• 03学习 JS面向对象笔记 义美


    ------------------------------

    1.原型 (prototypr 原型属性)

    2.继承


    3.原型链


    ----------------------------------


    prototypr 原型属性


    constructor 构造函数


    ----------------------------------

    prototypr 原型属性

    为什么使用原型? 原型可以达到继承的目的


    function Person(){

    };
    Person.prototype.name = 'shaozhu';
    Person.prototype.age = 22;
    Person.prototype.action = function(){
    console.log(this.name);
    }

    var person1 = new Person();//实例化 可以享有里面的所有属性和方法

    person1.name

    Person {}

    //我们如果打印出person1 看看会是什么

    console.log(person1);

    //发现有一个 __proto__ 没错 我们如果要取原型里面的东西 就要用这个来取值


    原型的好处 相同的存在原型里面 不相同的把它独立出来

    ----------------------------------

    例子 修改实例的属性 不影响其他实例的属性

    function Person(){

    };

    Person.prototype.name = 'shaozhu';

    Person.prototype.age = 22;

    Person.prototype.action = function(){

    consloe.log(this.name);

    }


    var person1 = new Person();

    person1.name='ben';

    var person2 = new Person();

    person2.name;


    "shaozhu"

    ----------------------------------


    修改原型的属性后 所有的实例化的对象都会跟着修改

    修改原型属性例子:

    function Person(){

    };

    Person.prototype.name = 'sonia';

    Person.prototype.age = 22;

    Person.prototype.action = function(){

    consloe.log(this.name);

    }


    var person1 = new Person();

    person1.__proto__.name='ben';//修改原型
    var person2 = new Person();

    person2.name;


    "ben"

    注意:一个属性 如果原型定义了 实例也定义了 实例的 先从实例找 然后再从原型找

    --------------------------------------------------------------------

    检测 一个实例是否属于这个原型


    function Person(){

    };

    Person.prototype.name = 'shaozhu';

    Person.prototype.age = 22;

    Person.prototype.action = function(){

    consloe.log(this.name);

    }

    var person1 = new Person();

    person1.__proto__.name='ben';//修改原型

    var person2 = new Person();


    Person.prototype.isPrototypeOf(person1)//检测 返回布尔


    大型项目 原型封装用的比较的多

    ----------------------------------


    构造函数和原型 混合使用

    function Aa(name,age){
    this.name = name;
    this.age = age;
    }
    Aa.prototype.action = function(){//构造函数里面的一个方法 用原型声明 这个方法可以减少所占的资源 原型
    return this.name;
    }
    var aa = new Aa("qqq",22);

    var bb =new Aa("www",23);

    console.log(aa.action());//调用

    bb.action()


    "www"

    ----------------------------------
    例子:

    function Aa(name,age,hobby){
    this.name = name;
    this.age = age;
    this.hobby = hobby;
    }
    Aa.prototype.action = function(){//构造函数里面的一个方法 用原型声明 这个方法可以减少所占的资源
    return "名字:"+this.name+",年龄:"+this.age+",爱好:"+this.hoboy;
    }
    var aa = new Aa("qqq",22,'写代码');

    var bb =new Aa("www",23,'搭讪');

    console.log(aa.action());

    名字:qqq,年龄:22,爱好:写代码


    console.log(bb.action());

    名字:www,年龄:23,爱好:搭讪


    ----------------------------------

    公共的可以放在原型里面 这个效果更高!!! 比如 action();

    如果公共的不使用原型 多次的实例化之后 可能会出现内存的溢出!!


    ----------------------------------

    继承 !!!!!


    继承有两种:接口继承 实现继承(js 只支持这个!)


    function Action(){};

    Action.prototype.caDo = function(){
    console.log('吃饭 睡觉');
    }

    function Ben(){};

    Ben.prototype = new Action();//继承 全部都继承了

    var aa = new Ben();//实例化 Ben

    aa.caDo();


    吃饭 睡觉

    先从实例里面找 实例里面没有 然后到原型里面去找

    ----------------------------------


    原型链 继承和继承之间产生的关系链


    delete 不能删除继承的东西


    person1.__proto__.name='ben';//修改原型

    总结:原型里面放公用的 继承 可以提高效率

  • 相关阅读:
    oracle11g数据库安装
    WIN7+QT5.2.0 连接oracle11g问题及解决方法
    WIN7+Qt5.2.0连接oracle数据库的oci驱动的编译
    Qt编译Oracle OCI驱动
    Qt 中 Oracle 数据库 QOCI 驱动问题及解决
    qt QThread
    Qt之模型/视图(自定义风格)
    Qt之模型/视图(实时更新数据)
    Qt之模型/视图(委托)
    AE地图查询
  • 原文地址:https://www.cnblogs.com/shaozhu520/p/8470087.html
Copyright © 2020-2023  润新知