JS-运算符与语句

1、箭头函数

箭头函数提供了一种更简单的函数书写方式

//普通函数
var fn=function(a){
return a
}
fn(10)

//箭头函数
var fn=(a,b)=>a*b
fn(10,20)

如果箭头函数只有一个参数时可以不用括号

var fn=a=>a
fn(100)

当箭头函数函数体有多行语句,用 {} 包裹起来,表示代码块,当只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回

var fn=(a,b)=>{
var tree=a*b
return tree
}
fn(2,5)

当箭头函数要返回对象的时候,为了区分于代码块,要用 () 将对象包裹起来

var fn=(name,age)=>({name:name,age:age})
fn("YU",18)  //{name:"YU",age:18}

关于箭头函数的this的指向问题

this是离它最近的嵌套的 function/方法这个函数的调用者,直到顶层都没有就是window

var fn=(a)=>{
console.log(this,99999)  //this是window
return a
}


var obj={
name:"YU",
fm:function(){
var fm1=(x)=>{
console.log(this,8888)  //this为obj  距离最近的函数体的调用者
return x
}
fm1()
}
}
obj.fm()


var obj={
name: "YU",
fn: function(){
console.log(this,88)  //this为obj
},
fm:()=>{
console.log(this,99)  //this为全局window对象
}
}
obj.fn()
obj.fm()

箭头函数这样设计this的目的 

var obj={
name:"李华",
luck:function(){
var good=()=>{
console.log(this.name+"中奖了")  //李华中奖了
}
good()
}}
obj.luck()

箭头函数不能用做创建对象

var fn=(a)=>{
this.a=a
}
var f1=new fn(10)  //Uncaught TypeError: fn is not a constructor

当函数传入多余的实参用剩余运算符全部传入

var fn=(a,)=>{
console.log(a)  //11
console.log(x1)  //[233,44,5,2]
console.log(arguments) //Uncaught ReferenceError: arguments is not defined
}
fn(11,223,44,5,2)

2、模块化

ES6 的模块化分为导出(export)导入(import)两个模块

//导出字符串
export default "aaa";

//导出数字
export default 123;

//导出布尔值
export default true;

//导出数组
export default [11,3,2,3];

//导出对象
var obj={
name:"李华",
age:20
}
export default obj;

//导出函数
var fn=function() {
console.log("菜根谭");
return 100;
}
export default fn;

//导出类
class People{
constructor(){
this.a=100;
}
say(){
console.log("hello,world");
}
}
export default People;

导入importfrom关联使用,此时script标签的type必须设置为module

单例模式:多次重复执行同一句 import 语句,那么只会执行一次,而不会执行多次。import 同一模块,声明不同接口引用,会声明对应变量,但只执行一次 import

<script type="module">
import Grammer from "./src/thanks.js";
var g=new Grammer();
g.say();
</script>

3、类(class)

了解类之前先了解js是什么:js是基于面向对象设计的单线程的静态脚本语言

//声明类
class Person{				
}
let p1=new Person()
console.log(p1)
			
//匿名类
var fn=class{				
}
var f1=new fn()
console.log(f1)

 js没有类 是原型的思想设计的类,但是学习和使用这个技术时,心中要用类的思想学习

class People{
constructor(x,y){
this.x=x
this.z=y
}
age=18
say(){
console.log(this.age,111)  //18,111
}
static life="well"
static play(a,b){
console.log(a+b)  //3
}
}
var p=new People(11,22)
p.say()
People.play(1,2)
console.log(p)  //

 类的继承

(1)解决代码的复用

(2)使用extends关键字实现继承

(3)子类可以继承父类中所有的方法和属性

(4)子类只能继承一个父类(单继承),一个父类可以有多个子类

(5)子类的构造方法中必须有super()来指定调用父类的构造方法,并且位于子类构造方法中的第一行

(6)子类中如果有与父类相同的方法和属性,将会优先使用子类的(覆盖)

通俗的说就像儿子继承父亲

class Father {
            life = "bad"
            constructor(addr) {
                this.addr = addr
                this.rich = function () {
                    console.log("在" + this.addr + "有一套房")
                }
            }
            down() {
                console.log("在" + this.addr + "别人一百万")
            }
            static age = 50
        }
        var f1 = new Father("重庆")
        f1.rich()
        f1.down()
        console.log(f1)

        class Son extends Father {
            constructor(addr) {
                super(addr)
                this.age = 23
                this.money = "一万"
            }
        }
        var s1 = new Son("成都")
        console.log(s1)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值