新的语法可能不被浏览器支持,可以使用babel转换为浏览器支持的代码格式;

为什么要定义class?

js是一门面向对象的编程语言。需要利用类来复用代码,提高编程效率。

需要什么样的class能力?

继承+多态

例子:在页面中显示Hello World!

1)创建工程文件夹,在该文件夹中创建src文件夹,在src文件夹中创建index.js文件,并在其中写入显示Hello World!的代码。

2)执行npm init -y 命令来创建包含默认内容的package.json文件

3)创建webpack配置文件 webpack.config.js。

目前只需要配置能将新代码转换为老旧代码的功能:

const path = require('path');  //note的path模块用来处理路径信息

const config = {

mode:'development',

entry:path.resolve(__dirname,'src/index.js'),

output:{

path:path.resolve(__dirname,'dist'),

filename:'main.js'

},

module:{

rules:[{

test:/\.js$/,

exclude:/node_modules/,

use:{

loader:'babel-loader',

options:{

presets:['env'],

}

}

}]

},

devtool:'inline-source-map'

};

module.exports = config;

为了更方便的调用webpack,添加npm的script属性:

"start":"webpack -w”

监视文件更改,自动完成编译

要安装以下依赖:

webpack、webpack-cli、babel-core、babel-preset-env、babel-loader

4)执行npm start,编译成功后,项目工程目录下会生成一个dist文件夹,文件夹中是

转换好的代码文件main.js

报错:Error: Cannot find module '@babel/core'

  babel-loader@8 requires Babel 7.x (the package '@babel/core'). If you'd like to 

use Babel 6.x ('babel-core'), you should install 'babel-loader@7'.

解决:安装@babel/core依赖:npm install --save-dev @babel/core

5) 创建html文件,在其中引用main.js文件

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title></title>

<meta name="viewport" content="width=device-width,

initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,

user-scalable=no">

<style type="text/css"></style>

</head>

<body>

</body>

<script src="dist/main.js"></script>

</html>

6)在浏览器中打开,页面中出现Hello World!,表示项目环境已经创建完成。

7)实现继承与多态。执行npm start,才能实时生成新的main.js,实时修改页面

function Animal(){}

function Dog(){}

//dog instanceof Animal => true

//dog.__proto__.__proto__... === Animal.prototype

Dog.prototype = Object.create(Animal.prototype);

document.write(new Dog() instanceof Animal);// true 实现了继承

==================================================

function Animal(){}

function Dog(){}

Object.defineProperties(Animal.prototype,{

name:{

value(){

return 'Animal';

}

},

say:{

value(){

return `I'm ${this.name()}`;

}

}

})

Dog.prototype = Object.create(Animal.prototype);

document.write(new Dog().say());  //I'm Animal 实现了继承

======================================================

function Animal(){}

function Dog(){}

Object.defineProperties(Animal.prototype,{

name:{

value(){

return 'Animal';

}

},

say:{

value(){

return `I'm ${this.name()}`;

}

}

})

Dog.prototype = Object.create(Animal.prototype,{

name:{

value(){

return 'Dog';

}

}

});

document.write(new Dog().say()); //I'm Dog  实现了多态

=====================================================

function Animal(){}

function Dog(){}

Object.defineProperties(Animal.prototype,{

name:{

value(){

return 'Animal';

}

},

say:{

value(){

return `I'm ${this.name()}`;

}

}

})

Dog.prototype = Object.create(Animal.prototype,{

constructor:{

value:Dog,

enumerable:false

},

name:{

value(){

return 'Dog';

}

}

});

document.write(new Dog().say());

console.log(Dog.prototype.constructor); //ƒ Dog() {}  实现了完整的继承,很麻烦

==================================================

ES2015开始,JS支持了class语法

class Animal{

name(){

return 'Animal';

}

say(){

return `I'm ${this.name()}`;

}

}

class Dog extends Animal{

food = 'bone';//定义成员属性

name(){

return 'Dog';

}

}

console.log(new Dog() instanceof Animal);//true 实现了继承

两次报错:

1⃣️Module build failed (from ./node_modules/babel-loader/lib/index.js):

  TypeError: /Users/mac/Desktop/testcode_jyt/mobx-test/src/index.js: Cannot read property 'bindings' of null

  解决:修改webpack配置文件为

module: {

rules:[{

test: /\.js$/,

loader: 'babel-loader',

exclude: __dirname + 'node_modules',

include: __dirname + 'src',

options: {

presets: ['env']

}

}]

},

2⃣️ERROR in ./src/index.js 10:6

  Module parse failed: Unexpected token (10:6)

      You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders

                    | }

                    | class Dog extends Animal{

                    > food = 'bone';//定义成员属性

                    | name(){

                    | return 'Dog';

  解决:缺少babel插件,不能识别这一语法,安装即可。

npm i babel-plugin-transform-class-properties -D

安装后在webpack配置文件中修改配置。

在options中增加plugins: ['transform-class-properties']

事实上我的还是报错,相同的错误。。试了很多办法也没解决。。。

mobx学习笔记02——mobx基础语法(class)的更多相关文章

  1. mobx学习笔记04——mobx常用api

    1 可观察的数据(observable) observable是一种让数据的变化可以被观察的方法. 那些数据可被观察? -原始类型 String.Number.Boolean.Symbol -对象 - ...

  2. <学习笔记 之 JQuery 基础语法>

    jQuery 库 - 特性 jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操作 HTML 事件函数 JavaSc ...

  3. mobx学习笔记03——mobx基础语法(decorator修饰器)

    在声明阶段实现类与类成员注解的一种语法. function log(target){ const desc = Object.getOwnPropertyDescriotors(target.prot ...

  4. Java 学习笔记(1)——java基础语法

    最近抽时间在学习Java,目前有了一点心得,在此记录下来. 由于我自己之前学过C/C++,而Java的语法与C/C++基本类似,所以这一系列文章我并不想从基础一点点的写,我想根据我已有的C/C++经验 ...

  5. Java基础学习笔记三 Java基础语法

    Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...

  6. Java基础学习笔记四 Java基础语法

    数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...

  7. Java基础学习笔记七 Java基础语法之继承和抽象类

    继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...

  8. Java基础学习笔记八 Java基础语法之接口和多态

    接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...

  9. Java基础学习笔记二 Java基础语法

    注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /* 这是 * 一段注释, * 它跨越了多个行 */ public vo ...

随机推荐

  1. 前端每日实战:2# 视频演示如何用纯 CSS 创作一个矩形旋转 loader 特效

    效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. https://codepen.io/zhang-ou/pen/vjLQMM 可交互视频教程 此视频是可以交 ...

  2. PHP csv导出数据 (二)

    全部导出和时间导出 html代码,全程并不需要引用什么插件 <include file="public@header"/> <link href="__ ...

  3. Jsoup学习和使用

    我们先看一下百度百科简介 它是java的HTML解析器 用HttpClient获取到网页后 具体的网页提取需要的信息的时候 ,就用到Jsoup,Jsoup可以使用强大的类似选择器,来获取需要的数据. ...

  4. 14days laravel

    <?php namespace App\Console\Commands\Mining; use App\Console\Commands\Core\BaseCommand; use App\R ...

  5. npm install 安装不成功,提示python2.7

    npm install 安装不成功的原因 是因为缺少python的环境 解决方法: 1.去官网下载https://www.python.org/download/releases/2.7/ 2.安装成 ...

  6. ngrinder压力测试

    文章目录 另一篇 部署demo 写脚本 压力测试 目标主机监控 可能报错 总结: 另一篇 https://blog.csdn.net/dataiyangu/article/details/888518 ...

  7. Visual Studio Code配置技巧

    Visual Studio Code配置技巧 VS Code是啥 Visual Studio Code(以下简称 VS Code) 是一个免费.开源.跨平台的由微软开发的程序编辑器.它是用 TypeS ...

  8. luoguP2123 皇后游戏(贪心)

    luoguP2123 皇后游戏(贪心) 题目 洛谷题目chuanso 题解 有一篇好题解,我就懒得推式子了,毕竟打到电脑上还是很难的 牛逼题解传送门 code #include<iostream ...

  9. 20、numpy——IO

    NumPy IO Numpy 可以读写磁盘上的文本数据或二进制数据. NumPy 为 ndarray 对象引入了一个简单的文件格式:npy. npy 文件用于存储重建 ndarray 所需的数据.图形 ...

  10. python学习第十四天字典的del(),pop().popitem(),clear()删除方法

    字典的每个键值 key=>value 数据类型,字典的key是唯一的,Value可以一样 names={'玖乐公司网址':‘www.96net.com.cn’,"电池网":' ...