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)

posted @ 2020-06-07 22:10  cnchengv  阅读(342)  评论(0编辑  收藏  举报