zoukankan      html  css  js  c++  java
  • 0607

    1

    一、定义

    根据函数中声明变量的方式,函数中变量分为以下三种:

            ->局部变量:在函数中以var声明的变量

            ->实例属性:在函数中以this前缀修饰的变量

            ->类属性:在函数中以函数名前缀修饰的变量

    二、区别

    ->局部变量是只能在函数里访问的变量

    ->实例属性是属于单个对象的,因此必须通过对象来进行访问

    ->类属性是属于整个类(也指函数)本身的,因此必须通过类(也指函数)来进行访问

    2 new 三步

    var obj = new Base();

    相当于

    var obj  = {};

    obj.__proto__ = Base.prototype;

    Base.call(obj);

    构造函数一步放实例 变量相关,prototype 是类属性,放的东西有类属性性质

    // callnew 更基本 call的参数为this指针;

    //call来理解更基本

    3、六大继承

     

    结合new

    https://www.jianshu.com/p/c011e41cf161

    a 原型链继承

    SubType.prototype = new SuperType(); 原型链继承

    特点:因为每个对象的 __proto__都指向构造函数的 prototype。所以每个对象继承的属性都是一样的

    function SuperType(){

        this.colors = ["red", "blue", "green"];

    }

    function SubType(){            

    }

    //inherit from SuperType

    SubType.prototype = new SuperType();

    var instance1 = new SubType();

    instance1.colors.push("black");

    var instance2 = new SubType();

    b、最重要 寄生组合式

    function inheritPrototype (SuperType, SubType) {

      if (typeof SuperType !== 'function' || typeof SubType !== 'function') {

        throw new Error('必须传递构造函数!')

      } 

      // 这个地方利用Object.create(Subtype.prototype) 

      // 非常巧妙的让Subtype.prototype对象继承自 SuperType.prototype.

      // 而不是去覆盖自己.

    // 特别注意:!!!!!!!!!!!!! Object.create 方法会返回一个对象 obj. obj.__proto__ = Object.create 函数接受的参数.

    // 所以,任何在此代码前给 obj 设置的属性和方法,都应该在此方法执行完毕之后在执行,否则会被覆盖.

    // 引用都变了,当然会时效.

      SubType.prototype = Object.create(SuperType.prototype)

    }

    inheritPrototype(SuperType, SubType)

    function SuperType (name) {

      this.name = name

      this.showName = function () {

        console.log('from SuperType:' + this.name)

      }

    }

    SuperType.prototype.super_protoProperty = 'SuperType原型属性'

    SuperType.prototype.super_protoFunction = function () {

      console.log('SuperType原型方法')

    }

    function SubType (name, age) {

      SuperType.call(this, name)

      this.age = age

      this.showAge = function () {

        console.log('from SubType:' + this.age)

      }

    }

    SubType.prototype.sub_protoProperty = 'SubType原型属性'

    SubType.prototype.sub_protoFunction = function () {

      console.log('SunType原型方法')

    }



    const sub = new SubType('张三', 22)

    sub.showAge()

    sub.showName()

    console.log(sub.super_protoProperty) // 拿不到 undefined

    sub.super_protoFunction() // 方法不存在.

    sub.sub_protoFunction() // 拿自己的原型没问题

    console.log(sub.sub_protoProperty) // 拿自己的原型没问题

    Object.create()

    只看寄生组合式继承.

    To thi : 我只一路去

    4、闭包

    我们首先知道闭包有3个特性:

    函数嵌套函数

    函数内部可以引用函数外部的参数和变量

    参数和变量不会被垃圾回收机制回收

    https://blog.csdn.net/dovlie/article/details/76339244

    5、let const

    //先一周准备,最重要的是都要

    6、Constructor

    https://www.cnblogs.com/aoyo/p/5245162.html

    7、let const

    https://www.cnblogs.com/zhuzhenwei918/p/6131345.html

    8、Object.create(null)

       var obj = {};

        var obj2 = Object.create(null);

        console.log(obj);

        console.log(obj2)

  • 相关阅读:
    linux读写锁
    正则表达式
    C++原型模式和模板模式
    C++外观模式和组合模式
    C++代理模式
    c++桥接模式
    Linux常用命令history/tcpdump/awk/grep
    C++委托模式
    c++ 读写锁
    布衣客
  • 原文地址:https://www.cnblogs.com/cnchengv/p/13062560.html
Copyright © 2011-2022 走看看