HTML5

原生js如何写一个类?

2020-08-25  本文已影响0人  陌客百里

【序】今天又在翻看公众号:《前端大全》了,发现这样篇文章讲原生js的类的,讲的挺好的,就打算自己再借东风精简一下关键点,原文地址0

一个类的主要组成部分有:类名,构造函数,属性,方法, 继承
在typescript中是这样的↓

import Vue from 'vue'
class foo extend Vue{
constructor(dogName:string){
  this.dog = dogName;
}
  public dog:string = 'husky'
  public dogSay(value){
  console.log(`dog say:${value}`)
}
}

相信大家很快就能够找到对应的部分,那么在js早期版本(指的是ES6之前的版本),是这么实现的呢?

function Animal(){}

function Dog(dogName){
  this.dog = dogName;
}
Dog.prototype.__proto__ = Animal.prototype
Dog.prototype.dogSay = function(value){
  console.log(`dog say:${value}`)
}

let myFoo = new foo('wangcai')
myFoo.dogSay('hello')

现在再来对号入座,是不是感觉能看懂又觉得不太懂,所以就引入下列问题

问题一

问题二

问题三

问题四

问题五

function foo(dogName){
  foo.prototype.dog = dogName;
}

问题六

问题七

问题八


总结

原文提出的细则总是难以理解,我学习时喜欢找到最基础的因素并向外推导,因此我们需要先找到会核心的元素,一个函数,从它开始推导。

一个函数的组成部分:函数体,prototype空间,constructor构造器
一个实例的组成部分:实例本身的内存空间,实例的公共空间,
创建一个实例所需要的关键词:new
好的接下来大家能不能将过程再还原回来?
当我们new Dog()的时候发生了什么流程?
1.搜索new 通过Dog.prototype.proto找到了构造器方法

  1. 通过构造器方法创建了新的实例内存空间,实例中都有一个特殊方法proto,指向了实例的公共空间prototype
  2. 当调用实例的属性时,js就会再实例的空间查找,找不到就会顺着proto的指向去查找,如果都没有该属性就会返回null
上一篇下一篇

猜你喜欢

热点阅读