精华内容
下载资源
问答
  • 扩展
    万次阅读
    2022-05-09 14:31:20

    一、什么是扩展?

    • 扩展就是向一个已有的类、结构体或枚举类型添加新功能,扩展可以对一个类型添加新的功能,但是不能重写已有的功能。
    • Swift 中的扩展可以:
      • 添加计算型属性和计算型静态属性;
      • 定义实例方法和类型方法;
      • 提供新的构造器;
      • 定义下标;
      • 定义和使用新的嵌套类型;
      • 使一个已有类型符合某个协议。
    • 扩展声明使用关键字 extension:
    extension SomeType {
        // 加到SomeType的新功能写到这里
    }
    
    • 一个扩展可以扩展一个已有类型,使其能够适配一个或多个协议,语法格式如下:
    extension SomeType: SomeProtocol, AnotherProctocol {
        // 协议实现写到这里
    }
    

    二、计算型属性

    • 扩展可以向已有类型添加计算型实例属性和计算型类型属性。
    • 如下所示,向 Int 类型添加了 5 个计算型实例属性并扩展其功能:
    extension Int {
       var add: Int {return self + 100 }
       var sub: Int { return self - 10 }
       var mul: Int { return self * 10 }
       var div: Int { return self / 5 }
    }
        
    let addition = 3.add
    print("加法运算后的值:\(addition)")
        
    let subtraction = 120.sub
    print("减法运算后的值:\(subtraction)")
        
    let multiplication = 39.mul
    print("乘法运算后的值:\(multiplication)")
        
    let division = 55.div
    print("除法运算后的值: \(division)")
    
    let mix = 30.add + 34.sub
    print("混合运算结果:\(mix)")
    
    • 以上程序执行输出结果为:
    加法运算后的值:103
    减法运算后的值:110
    乘法运算后的值:390
    除法运算后的值: 11
    混合运算结果:154
    

    三、构造器

    • 扩展可以向已有类型添加新的构造器,这可以让你扩展其它类型,将你自己的定制类型作为构造器参数,或者提供该类型的原始实现中没有包含的额外初始化选项。
    • 扩展可以向类中添加新的便利构造器 init(),但是它们不能向类中添加新的指定构造器或析构函数 deinit() 。
    struct sum {
        var num1 = 100, num2 = 200
    }
    
    struct diff {
        var no1 = 200, no2 = 100
    }
    
    struct mult {
        var a = sum()
        var b = diff()
    }
    
    
    extension mult {
        init(x: sum, y: diff) {
            _ = x.num1 + x.num2
            _ = y.no1 + y.no2
        }
    }
    
    
    let a = sum(num1: 100, num2: 200)
    let b = diff(no1: 200, no2: 100)
    
    let getMult = mult(x: a, y: b)
    print("getMult sum\(getMult.a.num1, getMult.a.num2)")
    print("getMult diff\(getMult.b.no1, getMult.b.no2)")
    
    • 以上程序执行输出结果为:
    getMult sum(100, 200)
    getMult diff(200, 100)
    

    四、方法

    • 扩展可以向已有类型添加新的实例方法和类型方法。
    • 向 Int 类型添加一个名为 topics 的新实例方法,如下所示:
    extension Int {
       func topics(summation: () -> ()) {
          for _ in 0..<self {
             summation() 
          }
       }
    }  
    
    4.topics({
       print("扩展模块内")       
    })    
        
    3.topics({
       print("内型转换模块内")       
    })  
    
    • 以上程序执行输出结果为:
    扩展模块内
    扩展模块内
    扩展模块内
    扩展模块内
    内型转换模块内
    内型转换模块内
    内型转换模块内
    
    • 这个 topics 方法使用了一个() -> ()类型的单参数,表明函数没有参数而且没有返回值。
    • 定义该扩展之后,就可以对任意整数调用 topics 方法,实现的功能则是多次执行某任务:

    五、可变实例方法

    • 通过扩展添加的实例方法也可以修改该实例本身。
    • 结构体和枚举类型中修改 self 或其属性的方法必须将该实例方法标注为 mutating,正如来自原始实现的修改方法一样。
    • 向 Swift 的 Double 类型添加了一个新的名为 square 的修改方法,来实现一个原始值的平方计算:
    extension Double {
       mutating func square() {
          let pi = 3.1415
          self = pi * self * self
       }
    }
    
    var Trial1 = 3.3
    Trial1.square()
    print("圆的面积为: \(Trial1)")
    
    
    var Trial2 = 5.8
    Trial2.square()
    print("圆的面积为: \(Trial2)")
    
    
    var Trial3 = 120.3
    Trial3.square()
    print("圆的面积为: \(Trial3)")
    
    • 以上程序执行输出结果为:
    圆的面积为: 34.210935
    圆的面积为: 105.68006
    圆的面积为: 45464.070735
    

    六、下标

    • 扩展可以向一个已有类型添加新下标。
    • 向 Swift 内建类型Int添加了一个整型下标,该下标[n]返回十进制数字:
    extension Int {
       subscript(var multtable: Int) -> Int {
          var no1 = 1
          while multtable > 0 {
             no1 *= 10
             --multtable
          }
          return (self / no1) % 10
       }
    }
        
    print(12[0])
    print(7869[1])
    print(786543[2])
    
    • 以上程序执行输出结果为:
    2
    6
    5
    

    七、嵌套类型

    • 扩展可以向已有的类、结构体和枚举添加新的嵌套类型:
    extension Int {
       enum calc
       {
          case add
          case sub
          case mult
          case div
          case anything
       }
    
       var print: calc {
          switch self
          {
             case 0:
                return .add
             case 1:
                return .sub
             case 2:
                return .mult
             case 3:
                return .div
             default:
                return .anything
           }
       }
    }
    
    func result(numb: [Int]) {
       for i in numb {
          switch i.print {
             case .add:
                print(" 10 ")
              case .sub:
                print(" 20 ")
             case .mult:
             print(" 30 ")
             case .div:
             print(" 40 ")
             default:
             print(" 50 ")
    
          }
       }
    }
    
    result([0, 1, 2, 3, 4, 7])
    
    • 以上程序执行输出结果为:
    10 
    20 
    30 
    40 
    50 
    50 
    
    更多相关内容
  • 解压后拖入浏览器扩展程序使用.zip

    千次下载 2021-11-27 20:02:51
    解压后拖入浏览器扩展程序使用
  • Kotlin 的扩展

    千次阅读 2022-01-19 13:36:22
    Kotlin 的扩展 /*什么是扩展函数和扩展属性?*/ // 这个扩展函数是直接定义在 Kotlin 文件里的,而不是定义在某个类当中的。这种扩展函数, //我们称之为“顶层扩展”,这么叫它是因为它并没有嵌套在任何的类当中,...

    Kotlin 的扩展

    /*什么是扩展函数和扩展属性?*/
    
    //  这个扩展函数是直接定义在 Kotlin 文件里的,而不是定义在某个类当中的。这种扩展函数,
    //我们称之为“顶层扩展”,这么叫它是因为它并没有嵌套在任何的类当中,它自身就在最外层。
    /*
     ①    ②      ③            ④
     ↓     ↓       ↓            ↓      */
    fun String.lastElement(): Char? {
        //    ⑤
        //    ↓
        if (this.isEmpty()) {   //在整个扩展函数的方法体当中,this 都是可以省略的
            return null
        }
    
        return this[length - 1]
    }
    /*
    * 注释①,fun关键字,代表我们要定义一个函数。也就是说,不管是定义普通 Kotlin 函数,还是定义扩展函数,我们都需要 fun 关键字。
    * 注释②,“String.”,代表我们的扩展函数是为 String 这个类定义的。在 Kotlin 当中,它有一个名字,叫做接收者(Receiver),也就是扩展函数的接收方。
    * 注释③,lastElement(),是我们定义的扩展函数的名称。
    * 注释④,“Char?”,代表扩展函数的返回值是可能为空的 Char 类型。
    * 注释⑤,“this.”,代表“具体的 String 对象”,当我们调用 msg.lastElement() 的时候,this 就代表了 msg。
    */
    
    // 使用扩展函数
    /*
    fun main() {
        val msg = "Hello World"
        // lastElement就像String的成员方法一样可以直接调用
        val last = msg.lastElement() // last = d
        println(last)
    }
    */
    
    //如果我们在普通函数的名称前面加上一个“接收者类型”,
    //比如“String.”,Kotlin 的“普通函数”就变成了“扩展函数”。
    
    //fun lastElement(): Char? {}
    //fun String.lastElement(): Char? {}
    // 普通函数与扩展函数之间的差别
    
    
    /*扩展函数的实现原理*/
    
    //反编译后的 Java 代码
    /*
    public final class ExtKt {
        // ①
        public static final Character lastElement(String $this) {
            CharSequence var1 = (CharSequence)$this;
            if (var1.length() == 0) {
                return null
            }
    
            return  var1.charAt(var1.length() - 1);
        }
    }
    
    public static final void main() {
        String msg = "Hello World";
        //                        ②
        //                        ↓
        Character last = ExtKt.lastElement(msg);
    }
    */
    //  通过第一个注释,可以看到,原本定义在 String 类型上面的扩展函数 lastElement(),变成了一个普通的静态方法。
    //另外,之前定义的扩展函数 lastElement() 是没有参数的,但反编译后的 Java 代码中,lastElement(String $this) 多了一个 String 类型的参数。
    //  还有第二个注释,这是扩展函数的调用处,原本 msg.lastElement() 的地方,变成了 ExtKt.lastElement(msg)。
    //这说明,Kotlin 编写的扩展函数调用代码,最终会变成静态方法的调用。
    
    //由于 JVM 不理解 Kotlin 的扩展语法,所以 Kotlin 编译器会将扩展函数转换成对应的静态方法,而扩展函数调用处的代码也会被转换成静态方法的调用。
    
    
    /*如何理解扩展属性?*/
    //扩展函数,是在类的外部为它定义一个新的成员方法;而扩展属性,则是在类的外部为它定义一个新的成员属性。
    
    // 接收者类型
    //     ↓
    val String.lastElement: Char?
        get() = if (isEmpty()) {
            null
        } else {
            get(length - 1)
        }
    
    fun main() {
        val msg = "Hello Wolrd"
        // lastElement就像String的成员属性一样可以直接调用
        val last = msg.lastElement // last = d
    }
    /*
        在这段的代码中,我们为 String 类型扩展了一个新的成员属性“lastElement”。
      然后在 main 函数当中,我们直接通过“msg.lastElement”方式使用了这个扩展属性,
      就好像它是一个成员一样。
    */
    
    /*
    那么,到底什么时候该用扩展函数,什么时候该用扩展属性呢?
        其实只需要看扩展在语义上更适合作为函数还是属性就够了。比如这里的 lastElement,它更适合作为一个扩展属性。
    这样设计的话,在语义上,lastElement 就像是 String 类当中的属性一样,它代表了字符串里的最后一个字符。
    */
    
    
    /*扩展的能力边界*/
    
    /*扩展能做什么?*/
    //在 Kotlin 当中,几乎所有的类都可以被扩展,包括普通类、单例类、密封类、枚举类、伴生对象,甚至还包括第三方提供的 Java 类。唯有匿名内部类,由于它本身不存在名称,我们无法指定“接收者类型”,所以不能被扩展。
    //Kotlin 扩展的应用范围还是非常广的。它最主要的用途,就是用来取代 Java 当中的各种工具类,比如 StringUtils、DateUtils 等等。
    //扩展函数的优势在于,开发工具可以在编写代码的时候智能提示。
    
    /*扩展不能做什么?*/
    //  本质上并没有修改接收类型的源代码,所以它的行为是无法与“类成员”完全一致的。
    //那么它对比普通的类成员,就会有以下几个限制:
    
    /*第一个限制,Kotlin 扩展不是真正的类成员,因此它无法被它的子类重写*/
    //举个例子,我们定义一个这样的 Person 类,并且分别为它扩展了一个 isAdult 属性和 walk() 方法:
    open class Person {
        var name: String = ""
        var age: Int = 0
    }
    
    val Person.isAdult: Boolean
        get() = age >= 18
    
    fun Person.walk() {
        println("walk")
    }
    /*
    * 由于 Person 类有 open 关键字修饰,所以可以继承这个 Person 类。不过,
      当尝试去重写它的成员时,会发现 isAdult 和 walk() 是无法被重写的,因
      为它们压根就不属于 Person 这个类。
    */
    
    /*第二个限制,扩展属性无法存储状态*/
    //如前面代码当中的 isAdult 属性,它的值是由 age 这个成员属性决定的,它本身没有状态,也无法存储状态。
    
    /*第三个限制,扩展的访问作用域仅限于两个地方。第一,定义处的成员;第二,接收者类型的公开成员*/
    // ①
    private val msg: String = ""
    
    fun String.lastElement2(): Char? {
        if (this.isEmpty()) {
            //       ②
            //       ↓
            println(msg)
            return null
        }
        //            ③
        //            ↓
        return this[length - 1]
    }
    /*
    * 在注释①的地方,我们在 Ext 这个 Kotlin 文件里定义了一个私有的变量 msg。
    * 由于 lastElement() 与 msg 是定义在同一个文件当中的,因此,在注释②处我们可以直接访问 msg,即使它是私有的。
    * 最后,是注释③,由于 length 是 String 类的公开属性,因此我们可以在扩展函数当中直接访问它。对应的,如果 length 是 String 的 private、protected 成员,那我们将无法在扩展函数当中访问它。归根结底,还是因为扩展函数并非真正的类成员。
    */
    
    //如果将扩展定义在某个类的内部,它能够访问这个类的私有属性吗?
    open class Person2 {
        var name: String = ""
        var age: Int = 0
    }
    
    class Helper {
        private fun walkOnFoot() {
            println("用脚走路")
        }
        val Person2.isAdult: Boolean
            get() = age >= 18
    
        fun Person2.walk() {
            // 调用了Helper的私有方法
            walkOnFoot()
        }
    
        fun test() {
            val person = Person2()
            // 仅可以在Helper类当中使用此扩展
            person.walk()
        }
    }
    //针对扩展的第三个限制来说:
    /*
    * 如果扩展是顶层的扩展,那么扩展的访问域仅限于该 Kotlin 文件当中的所有成员,以及被扩展类型的公开成员,
      这种方式定义的扩展是可以被全局使用的。
    * 如果扩展是被定义在某个类当中的,那么该扩展的访问域仅限于该类当中的所有成员,以及被扩展类型的公开成员,
      这种方式定义的扩展仅能在该类当中使用。
    */
    
    
    /*实战与思考*/
    
    // String.kt
    /*
    public class String : Comparable<String>, CharSequence {
        companion object {}
    
        public operator fun plus(other: Any?): String
    
        public override val length: Int
    
        public override fun get(index: Int): Char
    
        public override fun subSequence(startIndex: Int, endIndex: Int): CharSequence
    
        public override fun compareTo(other: String): Int
    }
    */
    
    // Strings.kt 部分代码
    /*
    public fun CharSequence.trim(): CharSequence = trim(Char::isWhitespace)
    
    public expect fun String.lowercase(): String
    */
    
    //Kotlin 扩展的第一个典型使用场景:关注点分离。所谓关注点分离,就是将我们程序的逻辑划分成不同的部分,每一个部分,都只关注自己那部分的职责。
    //以上面的 String 类为例,String.kt这个类,只关注 String 的核心逻辑;而Strings.kt则只关注 String 的操作符逻辑。
    
    //Kotlin 扩展主要有两个核心使用场景
    /*
    * 主动使用扩展,通过它来优化软件架构。
      对复杂的类进行职责划分,关注点分离。让类的核心尽量简单易懂,而让类的功能性属性与方法以扩展的形式存在于类的外部。比如我们的String.kt与Strings.kt。
    * 被动使用扩展,提升可读性与开发效率。
      当无法修改外部的 SDK 时,对于重复的代码模式,我们将其以扩展的方式封装起来,提供给对应的接收者类型,比如 view.updateMargin()。
    */
    

    小结

    • Kotlin 的扩展,从语法角度来看,分为扩展函数和扩展属性。定义扩展的方式,只是比普通函数、属性多了一个“扩展接收者”而已。
    • 从作用域角度来看,分为顶层扩展和类内扩展。
    • 从本质上来看,扩展函数和扩展属性,它们都是 Java 静态方法,与 Java 当中的工具类别无二致。对比 Java 工具类,扩展最大的优势就在于,IDE 可以为我们提供代码补全功能。
    • 从能力的角度来看,Kotlin 扩展一共有三个限制,分别是:扩展无法被重写;扩展属性无法存储状态;扩展的作用域有限,无法访问私有成员。
    • 从使用场景的角度来看,Kotlin 扩展主要有两个使用场景,分别是:关注点分离,优化代码架构;消灭模板代码,提高可读性和开发效率。
      在这里插入图片描述
    展开全文
  • 【细碎知识6】字扩展、位扩展和字位扩展

    千次阅读 多人点赞 2021-04-30 16:22:12
    目录0. 基本概念1. 字扩展2.位扩展3. 字位扩展 0. 基本概念 存储容量: 存储容量是主存中能存放二进制代码的总位数,即存储容量=存储单元个数×存储字长(每个存储单元的位数),...字扩展、位扩展、字位扩展是对存储容量

    0. 基本概念

    存储容量: 存储容量是主存中能存放二进制代码的总位数,即存储容量=存储单元个数×存储字长(每个存储单元的位数),也可用字节总数来表示: 存储容量=存储单元个数*存储字长/8

    举例:2114芯片大小为1K×4b,含义为:

    1K存储单元的个数位2^10个
    4b每个存储单元有4位

    地址线: 存储单元的个数=2^地址线的条数

    数据线: 数据线确定存储字长,数据线的条数=字长的位数。

    字扩展、位扩展、字位扩展是对存储容量进行扩展
    字扩展:对存储器的地址线进行扩展,例如用两片1K×4b的芯片扩展成2K×4b的芯片
    位扩展:对存储器的数据线进行扩展,例如用两片1K×4b的芯片扩展到1K×8b的芯片
    字位扩展:对存储器的地址线和数据线同时进行扩展,例如用4片1K×4b的芯片扩展到2K×8b的芯片

    1. 字扩展

    当芯片的存储字长与主存相同而存储单元数不足时,需要对存储空间即地址空间进行扩展。

    扩展方法:

    ①求出所需芯片的数目。
    ②将各芯片片内的地址线,数据线,读写线分别并联。
    ③片选cs信号线单独连接。用高位地址经过译码器译码而产生的输出信号,作为各个芯片的片选信号。

    举例:
    在这里插入图片描述
    示意图:
    在这里插入图片描述

    2.位扩展

    当芯片存储单位数与主存相同而存储字长不足时,需要对位数进行位扩展。

    扩展方法:

    ①求出所需芯片个数。
    ②将芯片的地址线,读写控制线,使能端并联。
    ③将各芯片的数据端按顺序输出到数据总线上。

    举例:
    在这里插入图片描述
    示意图:
    在这里插入图片描述

    3. 字位扩展

    芯片需要字和位同时进行扩展。如:用L×K位芯片扩展为M×N位存储器。

    扩展方法:

    ①求出需要( M×N )/( L×K )块芯片。
    ②扩展时分成M/L组。
    ③组内N/K片芯片进行位扩展,组间字扩展。

    举例:
    在这里插入图片描述

    展开全文
  • 并且会对这些插件做一些简单的Demo实现 存放到配套提供的程序包demo文件夹下 以便大家学习和使用 本期文档中将官方提供的所有附加插件的API都整理并存放到Extension节点下了 这些扩展的demo在附带的程序包中已经提供...
  • 关注公众号前端开发博客,领27本电子书回复加群,自助秒进前端群分享 50 个超实用的 Chrome 浏览器扩展!JSON1. JSON Viewer ProJSON Viewer Pro 用于可视化JSON文件。其核心功能包括:支持将JSON数据进行格式化,并...

    关注公众号 前端开发博客,领27本电子书

    回复加群,自助秒进前端群

    分享 50 个超实用的 Chrome 浏览器扩展!327976058de0d32d1684d9c4a051e4c2.png

    JSON

    1. JSON Viewer Pro

    JSON Viewer Pro 用于可视化JSON文件。其核心功能包括:

    • 支持将JSON数据进行格式化,并使用属性或者图表进行展示;

    • 使用面包屑深入遍历 JSON 属性;

    • 在输入区写入自定义 JSON;

    • 导入本地 JSON 文件;

    • 使用上下文菜单下载 JSON 文件;

    • 网址过滤器;

    • 改变主题;

    • 自定义 CSS ;

    • 复制属性和值;

    输入界面如下:

    fa7a30313b94eaa22350d29e055ee522.png

    格式化之后:

    ac1a080d3754f5c1ca5a4b45c99b6d75.png

    2. JSONVue

    JSONVue 是一个JSON数据查看器,主要用来格式化JSON数据:

    7b707a5aafabf7cb14682c0d6e919ec8.png 959844b7cf318e539927eabfd238283f.png

    网站技术

    3. Library Sniffer

    Library Sniffer 是一款给开发者使用的工具,能够探测当前网页所使用的类库、框架和服务器环境,为开发者提供了方便。

    97fe0b283051ffc7c191173a4697ad3d.png

    4. Wappalyzer

    Wappalyzer 扩展可以用来识别网站背后的底层技术。通过此扩展,可以了解特定应用程序是否是用 React、Vue、Angular、PHP等编写的。还可以访问有关 Web 服务器、编程语言、框架、内容管理系统、分析的信息工具、数据库等。

    174781dbb30eb59f22950990fd8cc9db.png

    5. WhatRuns

    WhatRuns 扩展程序只需单击一下即可找到任何网站上使用的技术。

    3b389cabf608ea865cd8a928365b3544.png

    开发调试

    6. PerfectPixel by WellDoneCode

    使用PerfectPixel插件可以将设计图加载至网页中,与已成型的网页进行重叠对比,以帮助开发和设计人员规范网页像素精度。这是一款可以优化前端页面显示的Chrome插件。

    41cc90d41cec83bdd858b7eaa69e91fb.png

    7. Clear Cache

    可以使用此扩展程序快速清除缓存,无需任何确认对话框、弹出窗口等。可以在选项页面上自定义要清除的数据和数量,包括:应用程序缓存、缓存、Cookie、下载、文件系统、表单数据、历史记录、索引数据库、本地存储、插件数据、密码和 WebSQL。

    b21e2fce91ae9038b17b3861701c394b.png

    8. VisBug

    VisBug 是一个使用 JavaScript 构建的开源网页设计调试工具,它可以让用户使用点击式和拖放式界面来查看网站的元素。

    47a1826239d5685a2208b69ba50565b1.png

    9. Debug CSS

    Debug CSS 是一个帮助调试CSS的插件。他可以显示出页面元素的轮播,按住Ctrl,并将鼠标悬浮在元素上,即可查看其信息:

    c3dd6f502fd5fb889eff2f325d6f04a7.png

    10. CSS Viewer

    CSS Viewer 是一款适用于 Web 开发人员的高效 Chrome 扩展。顾名思义,CSS 查看器可以显示将鼠标悬停在任何网页上的元素的 CSS 属性。

    b546577e6be9a6bc189567d070efd72d.png

    11. EditThisCookie

    EditThisCookie 是一个 cookie 管理器。可以添加,删除,编辑,搜索,锁定和屏蔽cookies。

    5a039149f9d274bbbfa08aecbe6e96cd.png

    12. React Developer Tools

    React Developer Tools 是开源 JavaScript 库 React 的 Chrome DevTools 扩展。它允许我们在 Chrome 开发者工具中检查 React 组件层次结构。安装此插件之后,将在 Chrome DevTools 中获得两个新选项卡:"⚛️ Components" 和 "⚛️ Profiler":

    • Components 选项卡显示了在页面上呈现的根 React 组件,以及它们最终呈现的子组件;

    • Profiler 选项卡用来记录性能信息。

    556a98b421c9306a43b4110d2b2aba35.png

    13. Vue.js devtools

    Vue.js devtools 是一款基于chrome浏览器的用于调试Vue.js应用程序的插件,可以使得开发人员大大提高调试效率。支持用户对DOM结构数据结构进行解析和调试功能。

    a4db55b7221b93fedfb91b47542c7b2c.png

    14. Augury

    Augury 可以帮助开发人员在 Google Chrome 浏览器中调试和分析 Angular 应用程序。

    6416d0489d6083e52766db77991534a5.png

    15. Firebug Lite for Google Chrome

    Firebug Lite是火狐浏览器中著名的开发者工具firebug插件移植到Chrome中的插件,在Chrome中安装了Firebug Lite插件以后,开发人员可以像在火狐浏览器中使用firebug一样熟悉的方式来调试网页内容,其包含了基本的HTML、CSS以及Javascript的调试功能,用于帮助网页前端开发工程师快速地调试网页,以便及时地找到网页中的BUG并及时修复。

    0683d215cfb3118f8f07f4f7c131bc70.png

    16. HTML Validator

    HTML Validator 在 Chrome 的开发者工具中添加了 HTML Validator。HTML 页面的错误数通过浏览器状态栏中的图标显示,详细信息可以在浏览器的开发者工具中查看。

    a25a4eba36f06fbb04c4ba2a0e0c7173.png

    17. Web Developer

    Web Developer 扩展为带有各种 Web 开发工具的浏览器添加了一个工具栏按钮。该扩展适用于 Chrome 和 Firefox,并且可以在这些浏览器支持的任何平台上运行,包括 Windows、macOS 和 Linux。

    a6fab5ba1ef4e195b7ad3bef2abb13c7.png

    18. Requestly

    Requestly 是一款Chrome和Firefox浏览器插件,提供URL转发、修改HTTP请求和结果、插入脚本等功能。

    e36cc1c30d95723ab1c89707af11f2d9.png

    19. Window Resizer

    Window Resizer 主要用来调整浏览器窗口的大小以模拟各种屏幕分辨率。

    61c542026de4394e7613b2e1b23fe009.png

    20. Responsive Viewer

    Responsive Viewer 是在一个视图中显示多个屏幕的 Chrome 扩展程序。该扩展将帮助前端开发人员在开发响应式网站/应用程序时测试多个屏幕。

    dfbbb1398a17423d57705758b51bcda3.png

    21. Moesif Origin & CORS Changer

    此插件允许直接从浏览器发送跨域请求,而不会收到跨域错误。可以使用此插件覆盖 Request Origin 标头,并将 Access-Control-Allow-Origin 设置为 *.

    25d758cb94133972231e2123227c65f5.png

    22. ColorPick Eyedropper

    ColorPick Eyedropper 是一个放大的吸管和颜色选择器工具,可让从网页等中选择颜色值。

    1e6c66e0e0d1b87a07b2c7adaec1e4e9.png

    23. CSSPeeper

    CSS Peeper 用于检查和复制元素样式的优秀工具,使用 CSSPeeper 可以将鼠标悬停在网页中的任何元素上,然后单击鼠标即可复制元素的样式。

    c122785e91a08d3cb07851ed4e8de123.png

    24. Dimensions

    Dimensions是一款能帮助使用者对网页上各种元素属性之间的距离进行测量的Chrome页面元素测量插件,该插件在点击启动插件图标后,可以对页面中图像、输入字段、按钮以及视频等页面元素之间上下左右的方位尺寸进行测量,同时还可以通过使用快捷键来快速启用或关闭该插件的功能,简单实用。fbfef531373aa69649704b2b3bd339c5.png

    25. Site Palette

    Site Palette 用于生成调色板。设计师和前端开发人员必备的工具。可以通过这款插件轻松获取网站的配色方案。

    1726fc116ce1d400a3ba21d74a1f48fd.png

    26. ColorZilla

    ColorZilla 是一款功能强大的提取网页色彩的工具;也是个快速的对颜色进行调节的Chrome插件,许多的用户将这款软件称呼为颜色吸取插件,它提取的颜色是非常的多样化,还可生产css颜色的代码等。

    • 吸管器-获取页面上任何像素或区域的颜色;

    • 一个先进的颜色选择器类似于可以在Photoshop和Paint Shop Pro中找到的;

    • 网页颜色分析器-分析任何网页上的DOM元素颜色,找到相应的元素;

    • 终极CSS梯度发生器;

    • 调色板查看器与7预先安装调色板;

    • 颜色历史最近挑选的颜色;

    • 显示标签名称,类别,编号,大小等元素信息;

    • 光标下的轮廓元素;

    • 自动将生成或采样的颜色复制到CSS RGB,Hex和其他格式的剪贴板;

    • 使用键盘快速采样页面颜色的键盘快捷键。

    1538be1ece358fe49343e42b3a38914d.png 18b72aed35ebb7bbd45e8d4c62bfab2e.png

    字体

    27. WhatFont

    当我们想查看网页中文字的字体时,最常用的方法就是在控制台查看文字的字体样式。那还有没有更简单的方法呢?WhatFont 就是一个查看网页字体的Chrome扩展。只需要的点击扩展图标,再点需要查看为文字即可:

    20b66a08e6d96af9595a67eb6da2803c.png

    28. Fonts Ninja

    Fonts Ninja 可以从任何网站识别字体、添加书签、试用并购买它们。

    086c196f0acfea1145c832bfa56a0c77.png

    标签页

    29. BrowserStack

    使用 BrowserStack 快速启动扩展在任何浏览器中启动一个新的测试会话。最多可设置 12 个浏览器以实现快速访问并最大限度地减少切换浏览器所花费的时间。

    0ea4c4804a057bbd87b26f82f59800d9.png

    30. Toby

    Toby 是一款 Chrome 新标签页工具,能够将未读的标签页分组显示在新标签页中,这样就能把所有未看完的标签页都关闭了。分组相当于多个 Chrome 窗口,将你的标签页都拖进 Toby 中,就不需要实时开着占地方了。

    73fdac4e2b83e3219c95501fd0b29e61.png

    31. daily.dev

    该扩展提供了每日热门开发者新闻,不需要再浪费时间搜索高质量的文章了。

    11385693c402ae50613949b2807517fd.png

    32. Momentum

    Momentum 拥有漂亮的新标签页面,每日更新精彩背景壁纸图片,可设置每日新鲜事焦点以及跟踪待办事项,无广告,无弹窗。

    2afd02181ad98757d59e55e7706a9c36.png

    33. The Great Suspender

    The Great Suspender 是一个轻量级的扩展用来减少 Chrome 的内存占用。如果同时打开许多选项卡,在可配置的时间之后未查看的选项卡将在后台自动挂起,从而释放该选项卡消耗的内存和 CPU。

    9986baab3ee5885769266d21dd9f9951.png

    34. Session Buddy

    Session Buddy是一个可以帮助用户查看、新增、编辑当前网站Session状态的Chrome插件。用户可以利用该插件保存网站当前的状态以便在关闭Chrome或关闭计算机后恢复,从而达到节省内存的作用。

    f1c208544973cae97cbad6c45be0bfaf.png

    Github

    35. Octotree

    Octotree 旨在让 GitHub 体验更好。通常,为了检查 Github 中的子文件夹,需要手动单击文件夹并导航。Octotree 扩展解决了这个问题。此扩展在项目的左侧显示存储库的目录结构,这有助于更好地理解文件夹结构。

    68f1a44c1daeca39750ea8241202e1c9.gif
    1_EKF88oqIyX6FzgueCKdtXg.gif

    36. File Icons for GitHub and GitLab

    File Icons for GitHub and GitLab 可以将 GitHub 和 GitLab 上的原始文件图标替换为特定文件类型的图标。

    792e7400facad9b3f75e8dc1c6a5ae97.png

    网页测试

    37. axe DevTools

    ax DevTools 是一个快速、轻量级但功能强大的测试工具,由 Deque 开发的世界上最值得信赖的可访问性测试引擎 axe-core 驱动。使用 ax DevTools 在网站开发过程中查找并修复更多可访问性问题。

    794a6c7f0dfa661e321808cd5badd57a.png

    38. OctoLinker

    OctoLinker 可以将特定语言的语句(如 include、require 或 import)转换为链接。当打开一个包含多个导入语句的文件并且想要快速打开它时,只需将鼠标悬停在链接的文件上并单击即可打开。

    ccde6ed8e4a8574f69dc1e4e9c93861e.png

    39. Web Developer Checklist

    此扩展可帮助 Web 开发人员分析网页是否违反最佳实践。

    53f2052be0192ba409edc439a0177064.png

    40. Check My Links

    Check My Links 是一个链接检查器,它可以抓取网页并查找损坏的链接。

    6e30706358f08140675385ff6db0b2b4.png

    41. Checkbot

    Checkbot 是用于验证一组HTML页面上的链接的工具。Checkbot可以检查一个或多个服务器上的单个文档或一组文档。它会创建一个报告,该报告汇总了引起某种警告或错误的所有链接。

    3a8e9ba7ca88559f6e71497bfbd86c3b.png

    42. PageSpeed Insights

    Google Page Speed Insighs 是一款旨在优化所有设备上的网页、提高网页加载速度的工具。

    5c3caaf93994286a5ede1a2dcd9c8cfe.png

    43. Meta SEO Inspector

    META SEO inspector是一款可以帮助用户分析网页的meta信息并得到SEO评估的谷歌浏览器插件。

    e212e28e465acad245bc709baedff895.png

    隐私广告

    44. Ghostery

    Ghostery 是强大的隐私保护扩展程序。其主要有以下功能:

    • 拦截广告:Ghostery 内置的广告拦截工具可以移除网页上的广告,防止网页杂乱无章,让你专注于想看的内容。

    • 保护隐私:利用 Ghostery 可以查看和拦截所浏览的网站上的跟踪器,控制收集数据的跟踪器。增强反跟踪功能还能将数据匿名化,进一步保护隐私。

    • 提高浏览速度:Ghostery 的智能拦截功能可以自动拦截和取消拦截跟踪器来满足网页质量标准,提高网页加载速度,优化网页性能。

    94c50bf64548ca414cd8fe547234632d.png

    45. AdBlock

    AdBlock 用来在YouTube、Facebook、Twitch和其他你喜爱的网站上拦截广告和弹窗。

    ba45d8a2b675fb6588ca801c02264f75.png

    效率工具

    46. Marinara

    番茄工作法(Pomodoro®)时间管理助理。• 长短两种休息时间 • 带有倒计时显示的工具栏图标 • 追踪Pomodoro历史和统计讯息 • 可配置的长休间隔 • 可配置的定时器时长 • 桌面与新标签页通知 • 超过20种音效可选的声音通知 • 计时器秒针走动音效

    29aa3b737a98c4c21273b1a121954d98.png

    47. Loom

    Loom 可以用来快速录制视频,并且能够将录制的视频上传到指定的网页中,Loom还支持在用户点击启动插件时,立即捕捉屏幕图像,同时开始视频录制操作,还可以将录制好的视频复制到粘贴板中存储。

    d6ffe668cbe805ee63db4c7b576b606d.png

    48. GoFullPage

    GoFullPage 是一款全屏截图插件(整个网页截图),完整捕获您当前页面的屏幕,进行滚动截图,而无需任何额外的权限。单击扩展程序图标,然后将其传输到屏幕快照的新标签页中,可以在其中将其下载为图像或PDF,甚至只需拖动即可,保存到桌面。

    ef6424544a8758af5ff39666937ae733.png

    49. BetterViewer

    BetterViewer 可以提供更好的图像查看体验,旨在替代基于 Chrome 浏览器中内置的图像查看模式。使用时,只需在页面右键点击图片,选择“在新标签页中打开图片”即可。

    82cdafc7e4346de722890881a0cfe777.png

    50. svg-grabber

    svg-grabber 是一个快速预览并从网站获取所有 svg 的工具。可以用来预览、下载和复制网站中所有 SVG 图标和插图的代码。

    649b794d21bbfa62e462d631f2b86a61.png
    
     
    - 完 -
    推荐阅读

    Chrome 96又更新了5个巨巨巨好用的功能

    44道JS难题,做对一半就是高手

    不常见但是有用的 Chrome 调试技巧

    86张脑图,一口气看完 React

    7942c8f4b7b63ad7857f9efa30aa22ba.png

    关注公众号:前端开发博客

    1. 回复「小抄」,领取Vue、JavaScript 和 WebComponent 小抄 PDF

    2. 回复「Vue脑图」获取 Vue 相关脑图

    3. 回复「思维图」获取 JavaScript 相关思维图

    4. 回复「简历」获取简历制作建议

    5. 回复「简历模板」获取精选的简历模板

    6. 回复「加群」进入500人前端精英群

    7. 回复「电子书」下载我整理的大量前端资源,含面试、Vue实战项目、CSS和JavaScript电子书等。

    8. 回复「知识点」下载高清JavaScript知识点图谱

     👍🏻 点赞 + 在看 支持小编

    展开全文
  • Kotlin的扩展函数知识点

    千次阅读 2022-04-20 00:08:16
    为什么需要扩展 一个新特性的出现必然是为了解决之前遗留的开发问题和提升目前开发效率。扩展函数也是如此。 首先来介绍下OOP:开放封闭原则。 软件应该是可扩展,而不可修改的。也就是对扩展开放,对修改封闭 举...
  • 字位扩展存储器示意图解析

    千次阅读 2021-07-16 05:12:53
    扩展(地址空间扩展) 如果每片的字数不够,需用若干芯片组成总容量较大的存储器,称为字数扩展。为此将高地址译码产生的若干不同片选信号,按各芯片在存储空间分配中所占的编址范围,分送各芯片。低位地址线直接...
  • Chrome扩展安装包Postman 绿色版

    万次下载 热门讨论 2014-12-10 15:39:52
    收集到的可用的Postman的可用安装包,安装包内有使用说明。很多人无法在Chrome商店安装,下载的又无法使用的这个应该可以解决了。
  • AxureRP谷歌浏览器扩展程序文件
  • 正因如此,当把一个低精度的数据类型转成一个高精度的数据类型时,必然会涉及到如何扩展位数的问题。这里有两种解决方案: (1)补零扩展:填充一定位数的0。 (2)补符号位扩展:填充一定位数的符号位(非负数填充0...
  • 常见的扩容方式有:字扩展,位扩展,字位同时扩展 主存与CPU的连接通过数据总线,地址总线,控制总线与CPU相连接。如下图所示: 其中: 地址线决定了CPU可寻址的最大内存空间。 控制总线(读写)指出总线周期的类型...
  • 扩展运算符

    千次阅读 2020-12-26 17:20:39
    扩展运算符格式 扩展运算符格式很简单,就是三个点(…) 重点:需要ES6 语法支持 扩展运算符作用??? 扩展运算符允许一个表达式在期望多个参数(用于函数调用)或多个元素(用于数组字面量)或多个变量(用于解构...
  • 扩展卡尔曼滤波

    万次阅读 2021-04-05 19:58:33
    扩展卡尔曼滤波(Extended Kalman Filter,EKF)是标准卡尔曼滤波在非线性情形下的一种扩展形式,EKF算法是将非线性函数进行泰勒展开,省略高阶项,保留展开项的一阶项,以此来实现非线性函数线性化,最后通过卡尔曼...
  • linux 下 php 安装扩展

    千次阅读 2022-03-09 16:51:51
    1、 下载需要的php操作redis的扩展包 (1)、切换到 cd / 根目录 (2)、下载phpredis wget https://github.com/nicolasff/phpredis/archive/2.2.4.tar.gz (https://github.com/nicolasff/phpredis ,这个手动下载...
  • 扩展Hierarchy之后的效果: 我们调试战斗的时候,需要在Hierarchy界面选中对应的武将,然后操作快捷键控制武将。由于多个操作我觉得比较麻烦,就在网上查找了一下扩展Hierarchy菜单的方法。 代码如下: ...
  • Arduino CNC电机扩展板详解(A4988驱动42步进电机)

    千次阅读 多人点赞 2021-04-01 17:26:45
    Arduino CNC电机扩展板详解(A4988驱动42步进电机) 概述 电机步进模式设置 外接直流电源 用于控制电机的Arduino引脚 驱动1个NEMA步进电机(42步进电机)电路连接 驱动1个NEMA步进电机(42步进电机...
  • 简单的说就是在对现有系统影响最小的情况下,系统功能可持续扩展及提升的能力,讲扩展性之前,我先讲下扩展性和伸缩性的区别,因为这两个点经常有人会混淆; 扩展性:指对现有系统影响最小的情况下,系统功能可持续...
  • Kotlin系列之扩展函数

    万次阅读 2018-04-17 00:22:18
    简述: 今天带来的是Kotlin浅谈系列的第五弹,这讲主要是讲利用Kotlin中的扩展函数特性让我们的代码变得更加简单和整洁。扩展函数是Kotlin语言中独有的新特性,利用它可以减少很多的样板代码,大大提高开发的效率;...
  • linux磁盘扩展

    千次阅读 2021-08-12 17:34:03
    步骤一:虚拟机扩展磁盘容量 1、首先,打开已经安装好的虚拟机,选择需要扩展磁盘的虚拟机,点击设备中的“硬盘”。如图: 2、接着,进入虚拟机设置界面,在界面的右侧选择“扩展”。如图: 3、接着,在弹出...
  • 不是所有的文件都能够进行直接的扩展名更改,将文件更改了不合适的扩展名之后会出现文件不可用的提示。我们在更改扩展名的时候一定要先确定扩展名之间是否可以通用。例如,扩展名为doc的文件可...
  • 存储器容量扩展 主存,主存储器,又称内存储器 存储器芯片的容量是有限的,为了满足实际存储器的容量要求,需要对存储器进行扩展。 主存扩展:将存储芯片连在一起组成足够的容量 存储器容量扩展的主要方法有: 位...
  • kotlin的扩展方法,其实是以java的静态方法形式存在的,也就是说如果要用java调用kotlin的扩展方法,和调用静态函数一样 调用扩展属性也是相同的道理 举个例子,我们在某个kotlin文件(文件名为Utils.kt)里为...
  • 那么如何给电脑扩展屏幕?相信很多小伙伴还不懂怎么操作?别担心,下面给大家说一下给电脑扩展屏幕的具体设置方法。具体方法如下:1、找到显示设置。进入我们电脑的桌面环境,在桌面的空白区域里面,鼠标右键单击,...
  • TCA9539 IO扩展芯片

    千次阅读 2021-07-28 11:09:54
    文章目录1 TCA9539 IO扩展芯片简介1.1 IO扩展芯片的作用1.2 TCA9539-Q1 简介2 TCA9539 原理图介绍3 TCA9539 寄存器介绍4 寄存器控制代码 1 TCA9539 IO扩展芯片简介 1.1 IO扩展芯片的作用 当主控制器MCU的IO接口不够...
  • 编辑器扩展总结 工欲善其事必先利其器 引言: 在项目开发中,编辑器扩展为开发者提供了开发自定义工具的功能,让开发者更加便利地使用编辑器开发项目。如若博客中存在错误,还请大佬们不吝赐教。所有参考的博客...
  • Tachiyomi扩展插件

    千次阅读 2021-06-04 09:20:09
    Tachiyomi扩展插件是一款很多人都在使用的漫画阅读手机软件。用户能够在软件中找到很多的漫画资源,各种类型的漫画全部都应有尽有。用户在软件中可以想看就卡,不会有广告来影响大家的。对这款软件感兴趣的小伙伴可...
  • 浏览器扩展管理 - 高级版

    千次阅读 2020-06-16 00:59:23
    包含内容有搜索扩展,安装扩展,打包扩展,导入扩展(即安装第三方扩展),等。本文推荐几个常用的扩展,并附带了其对应的打包好的扩展程序。 可以解决一些问题:无法同步扩展时手动为Chrome添加扩展,在自己喜欢的...
  • Apple 在 iOS 15 中引入了一些新设计和一系列新功能,其中就包括更好地扩展支持。 iOS 15‌ 中的 Safari 支持 web 扩展,用户可以通过 App Store 下载和安装,这样就有更广泛的扩展选项供用户选择。 要安装扩展程序...
  • 扩展,位扩展和字位扩展

    万次阅读 多人点赞 2020-04-07 08:39:06
    扩展扩展指的是用多个存储器器件对字长进行扩充,指的是用多个存储器器件对字长进行扩充,如用2个16KX4位芯片组成16KX8位的存储器。 位扩展的连接方式是将多片存储器的地址、片选CS、读写控制端R/W相应并联,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,427,456
精华内容 1,770,982
关键字:

扩展