mobx学习笔记02——mobx基础语法(class)
新的语法可能不被浏览器支持,可以使用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)的更多相关文章
- mobx学习笔记04——mobx常用api
1 可观察的数据(observable) observable是一种让数据的变化可以被观察的方法. 那些数据可被观察? -原始类型 String.Number.Boolean.Symbol -对象 - ...
- <学习笔记 之 JQuery 基础语法>
jQuery 库 - 特性 jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操作 HTML 事件函数 JavaSc ...
- mobx学习笔记03——mobx基础语法(decorator修饰器)
在声明阶段实现类与类成员注解的一种语法. function log(target){ const desc = Object.getOwnPropertyDescriotors(target.prot ...
- Java 学习笔记(1)——java基础语法
最近抽时间在学习Java,目前有了一点心得,在此记录下来. 由于我自己之前学过C/C++,而Java的语法与C/C++基本类似,所以这一系列文章我并不想从基础一点点的写,我想根据我已有的C/C++经验 ...
- Java基础学习笔记三 Java基础语法
Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...
- Java基础学习笔记四 Java基础语法
数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...
- Java基础学习笔记七 Java基础语法之继承和抽象类
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
- Java基础学习笔记八 Java基础语法之接口和多态
接口 接口概念 接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象的”类”.接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成.这样将功能的定义 ...
- Java基础学习笔记二 Java基础语法
注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /* 这是 * 一段注释, * 它跨越了多个行 */ public vo ...
随机推荐
- JavaScript .filter() 方法全解析
.filter是一个内置的数组迭代方法,它接受一个"谓词(译者注: 指代一个过滤条件的函数)",该"谓词"针对每个值进行调用,并返回一个符合该条件(" ...
- 给网页标题添加icon小图标
so easy: 给网页标题添加icon小图标: 直接在html文件的head部分添加下面代码(注意href的路径): <link rel="icon" type=" ...
- JavaScript 表单验证正则表达式大全
JavaScript 表单验证正则表达式大全[转载] 匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[ ...
- 【BASIS系列】SAP BASIS模块-后台配置的传输
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[BASIS系列]SAP BASIS模块-后台配 ...
- Pikachu漏洞练习平台实验——不安全的文件下载和上传(七)
1.不安全的文件下载 1.1.概述 文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下 ...
- vsphere虚拟化之 DNS服务的创建(二)
1.创建域控的DNS服务器,打开"服务器管理器",由此可以看到AD域安装成功后,DNS服务也附带安装成功. 2.点击“工具”--“DNS” 3.点击“正向查询区域”--“best. ...
- Reinforcement Learning for Self Organization and Power Control of Two-Tier Heterogeneous Networks
R. Amiri, M. A. Almasi, J. G. Andrews and H. Mehrpouyan, "Reinforcement Learning for Self Organ ...
- Phone-java标准类
//project-module-package //.代表包的目录层次 package cn.learn.day01.demo01; /* 1.类是一组相关属性(成员变量)与行为(方法)的集合,对象 ...
- js 柯里化、深拷贝、浅拷贝
curry const sum = (a, b, c, d) => a + b + c + d const curry = fn => (judge = (...args) => a ...
- 关于GeneXus中的ForeachCommand命令
首先作为我们开发过程中必不可少的命令For Each 有着无与伦比的重要性 但是我们从Wiki上得知 我们用到的可能只是它一丢丢的能力并没有全部使用出来. 所以 这篇文档将记 ...