ES6类-继承-Symbol-模版字符串

这篇具有很好参考价值的文章主要介绍了ES6类-继承-Symbol-模版字符串。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

 继承

ES5 如何继承

ES6继承

Symbol

用途

可以产生唯一的值,独一无二的值

解决命名冲突

getOwnPropertySymbols()

 作为全局注册表 缓存  Symbol.for()

 消除魔术字符串

 模版字符串


在javascript语言中,生成实例对象使用构造函数;ES6提供了类Class这个概念,作为对象的模板。定义一个类通过class关键字,ES6的类可以看成是构造函数的另一种写法。

class Person{
    constructor(name,age,gender){
        // 类构造器中属性和方法是实例私有属性和私有方法
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    // 实例公共方法 类似于存放在Person类原型对象中
    sayName(){
        console.log(this.name);
    }
    test = 'hello'; //实例公共属性
    friends = [];  //实例私有属性
    // 类静态属性和静态方法
    static personAttr = '类的静态属性';
    static personMethod = function(){
        console.log('类静态方法this指向类本身');
        console.log(this,this.personAttr,this.test,this.friends);
    }
}
let p1 = new Person('可乐',12,'male');
let p2 = new Person();
console.log(p1.test,p2.test);
console.log(p1.test === p2.test);
p1.friends.push('tom');
console.log(p1.friends,p2.friends);
console.log(p1.friends === p2.friends);
Person.personMethod();

ES6类-继承-Symbol-模版字符串,HTML+CSS+JS,es6,前端,javascript

 继承

ES5 如何继承

实例使用属性和方法
  1.从实例对象本身查找属性或者方法
  2.如果实例没有,从构造函数的原型对象中找
  3.如果还没有,从父构造函数的原型对象中找

/**
 * es5 继承 
 * 经典继承 原型链继承
 */
// function Animal(name,age,length,weight){
// 	this.name = name;
// 	this.age = age;
// 	this.length = length;
// 	this.weight = weight;
// }
// Animal.prototype = {
// 	constructor:Animal,
// 	sayType(){
// 		console.log(this.type)
// 	}
// }
// function Dog(name,age,length,weight,type){
// 	// 继承父构造函数属性  借用构造函数继承 经典继承
// 	Animal.call(this,name,age,length,weight);
// 	this.type = type;
// }
// // 原型链继承 子类得原型对象指向父类得实例 
// Dog.prototype = new Animal();
// Dog.prototype.constructor = Dog;
// let d1 = new Dog('可乐',12,'40cm','10kg','狗');
// d1.sayType();
// console.log(d1);

更详细的ES5继承见面向对象之创建对象模式和继承模式_学前端的狗头苏丹的博客-CSDN博客

ES6继承

class可以通过extends关键字实现继承,子类可以没有构造函数,系统会默认分配。子类提供了构造函数则必须要显式调用super。super函数类似于借用构造函数。类似于Animal.call()

1.子类对象指向父类对象

2.子类原型对象继承父类原型对象

/**
 * ES6继承 使用extends关键字实现继承
 */
class Animal{
    // 构造器属性 实例私有属性
    constructor(name,age,length){
        this.name = name;
        this.age = age;
        this.length = length;
    }
    // 类体方法 实例公共方法  存放在Animal.prototype中
    sayName(){
        console.log(this.name);
    }
    test = 'hello';
    friends = [];
    // 静态属性和静态方法
    static ParentAttr = '父类属性';
    static ParentMethod = function(a){
        console.log('父类的方法');
        return a instanceof Animal;
    }
}
// 子类继承父类     不提供constructor的情况
class Dog extends Animal{

}
let d1 = new Dog('可乐',12,'50cm');
console.log(d1);
d1.sayName();
d1.friends.push('tom')
console.log(d1.test,d1.friends,d1);
console.log(Dog.ParentAttr);
console.log(Dog.ParentMethod(d1));

// 子类继承自父类
console.log(Dog.__proto__ === Animal);
// 子类原型对象继承自父类的原型对象
console.log(Dog.prototype.__proto__ === Animal.prototype);

// 子类如果提供了构造器 必须显示调用super
// class Dog2 extends Animal{
//     constructor(name,age,weight,type,color){
//         super(name,age,weight); //相当于调用父类构造器  Animal.call()
//         this.type = type;
//         this.color = color;
//     }
//     sayName(){
//         console.log(this.name,'子类实例公共方法');
//     }
// }
// let d2 = new Dog2('可乐',12,'50cm','狗','黑色');
// console.log(d2);
// d2.sayName();

ES6类-继承-Symbol-模版字符串,HTML+CSS+JS,es6,前端,javascript

Symbol

ES6引入的一种新的原始数据类型Symbol,表示独一无二的值。Symbol函数可以接受参数,表示对于这个唯一值的描述。属于基本数据类型,Symbol()函数会返回symbol类型的值

参数:字符串 表示对这个symbol值的描述

用途

可以产生唯一的值,独一无二的值
let sy1 = Symbol();
let sy2 = Symbol();
console.log(sy1,sy2,sy1 === sy2,sy1.toString());

let a = new Number();
let b = new String();
console.log(a,b);

ES6类-继承-Symbol-模版字符串,HTML+CSS+JS,es6,前端,javascript

解决命名冲突
let sy3 = Symbol('name'); //接收的字符串 对symbol的描述
let sy4 = Symbol('age');
let obj = {
    name:'zhangsan',
    age:12,
    [sy3]:'terry',
    [sy4]:18,
    [Symbol('email')]:"443119974@qq.com"
}
console.log(obj);
for(let key in obj){
    console.log(key);
}

 ES6类-继承-Symbol-模版字符串,HTML+CSS+JS,es6,前端,javascript

getOwnPropertySymbols()

 从上图输出结果来看:我们可以发现for in循环无法遍历到symbol值作为属性名对应的属性,我们想要获取所有的symbol值对应的属性,,则需要使用getOwnPropertySymbols()方法

/**
 * 获取所有的symbol值对应的属性
 * getOwnPropertySymbols
 */
console.log(Object.getOwnPropertySymbols(obj));
let s = Object.getOwnPropertySymbols(obj);  //[ Symbol(name), Symbol(age), Symbol(email) ]
console.log(obj[s[2]]);

 ES6类-继承-Symbol-模版字符串,HTML+CSS+JS,es6,前端,javascript

 作为全局注册表 缓存  Symbol.for()

全局注册表
Symbol() 不同的是,用 Symbol.for() 方法创建的的 symbol 会被放入一个全局 symbol 注册表中。Symbol.for() 并不是每次都会创建一个新的 symbol,它会首先检查给定的 key 是否已经在注册表中了。假如是,则会直接返回上次存储的那个。否则,它会再新建一个。

/**
 * 3.作为全局注册表 缓存 Symbol.for()
 */
// 将symbol放到全局注册表中
let sy5 = Symbol.for('hello');
let sy6 = Symbol.for('hello');
console.log(sy5 === sy6);       //true

// 每次都会创建一个不同symbol值  虽然描述符一样 但是Symbol value值不一样
let sy7 = Symbol('hello');
let sy8 = Symbol('hello');
console.log(sy7 === sy8);       //false

// Symbol.keyFor()可以检测symbol值是否在全局注册表中注册过。 返回对于symbol的描述或者undefined
console.log(Symbol.keyFor(sy5));
console.log(Symbol.keyFor(sy6));
console.log(Symbol.keyFor(sy7));

Symbol.keyFor()可以检测symbol值是否在全局注册表中注册过。 返回对于symbol的描述或者undefined 

ES6类-继承-Symbol-模版字符串,HTML+CSS+JS,es6,前端,javascript

 消除魔术字符串

魔术字符串指的是,在代码之中多次出现、与代码形成强耦合的某一个具体的字符串或者数值。

/**
 * 4.消除魔术字符串
 */
function getArea(shape,options){
    let area = 0;
    switch(shape){
        case Shape.SJX:
            area = .5 * options.height * options.width;
            break;
        case Shape.ZFX:
            area = options.height * options.width;
            break;
        case Shape.CIRCLE:
            area = Math.PI * options.r * options.r;
            break;
        default:
            area = -1;
    }
    return area;
}
const Shape = {
    SJX:Symbol('三角形'),
    ZFX:Symbol('正方形'),
    CIRCLE:Symbol('圆'),
}
let res = getArea(Shape.SJX,{height:100,width:100,r:50})
console.log(res);

Shape.SJX = Symbol('六边形');
console.log(Shape);

ES6类-继承-Symbol-模版字符串,HTML+CSS+JS,es6,前端,javascript

 模版字符串

模板字面量是用反引号(`)分隔的字面量,允许多行字符串、带嵌入表达式的字符串插值和一种叫带标签的模板的特殊结构。

模板字面量有时被非正式地叫作模板字符串,因为它们最常被用作字符串插值(通过替换占位符来创建字符串)。然而,带标签的模板字面量可能不会产生字符串——它可以与自定义标签函数一起使用,来对模板字面量的不同部分执行任何操作。

/**
 * 模版字符串 可以解析变量
 */
let name = 'zhangsan';
let age = 12;
// let str = 'name' + 'age';
let str = `${name}+${age}`
console.log(str);

let id = 1;
let url = `121.199.0.35:8888/findById?id=${id}`;
console.log(url);

ES6类-继承-Symbol-模版字符串,HTML+CSS+JS,es6,前端,javascript

 文章来源地址https://www.toymoban.com/news/detail-569649.html

到了这里,关于ES6类-继承-Symbol-模版字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 前瞻|Java 21 新特性 String Templates(字符串模版)

    在日常写Java的时候,对于字符串的操作是非常普遍的,其中最常见的就是对字符串的组织。也因为这个操作非常普遍,所以诞生了很多方案,总下来大概有这么几种: 使用 + 拼接 使用 StringBuffer 和 SpringBuilder String::format and String::formatted 使用 java.text.MessageFormat 下面,我们一起

    2024年02月10日
    浏览(36)
  • ES:字符串排序,字符串按照数字排序

    对一个字符串类型的字段进行排序通常不准确,因为已经被分词成多个词条了 字段虽然是字符串,但是其实值是整数, 排序按照字符串转成整数排序 解决方式:对字段索引两次,一次索引分词(用于搜索),一次索引不分词(用于排序) 期望按照字符串排序, 不分词 期望按照

    2024年02月11日
    浏览(44)
  • HTML中的字符串转义

    转义可以防止 xss 攻击。接下来,我们来看一下如何转义。 Sanitizer 是浏览器自带的转义方法,在2021年初被提出,兼容性问题很大。 列举几个常用的 API:  这是一个简单的转义,只会把跟 html 有冲突的标签进行转义。 防止用户输入恶意篡改,Vue,JSX 默认情况下不用处理,插

    2024年02月12日
    浏览(64)
  • 前端如何安全的渲染HTML字符串?

    在现代的Web 应用中,动态生成和渲染 HTML 字符串是很常见的需求。然而,不正确地渲染HTML字符串可能会导致安全漏洞,例如跨站脚本攻击(XSS)。为了确保应用的安全性,我们需要采取一些措施来在安全的环境下渲染HTML字符串。本文将介绍一些安全渲染 HTML 字符串的最佳实

    2024年02月12日
    浏览(45)
  • python html(文件/url/html字符串)转pdf

    安装库 第二步 下载程序 wkhtmltopdf https://wkhtmltopdf.org/downloads.html 下载7z压缩包 解压即可, 无需安装 解压后结构应该是这样, 我喜欢放在项目里, 相对路径引用(也可以使用绝对路径, 放其他地方) 最好每个都像 string_to_pdf 函数一样, 捕获一下错误, 可以使程序更健壮, 避免转换失败

    2024年02月08日
    浏览(50)
  • 【ES6】—【新特性】—Symbol详情

    定义:独一无二的字符串 PS: Symbol 声明的值是独一无二的 PS: 无论Symbol.for()在哪里声明,都属于全局环境声明 当一个对象的key值有重复时,后面的值会覆盖前面的值 PS: 使用Symbol的独一无二的特性来解决

    2024年02月10日
    浏览(47)
  • 【ES6】JavaScript中的Symbol

    Symbol是JavaScript中的一种特殊的、不可变的、不可枚举的数据类型。它通常用于表示一个唯一的标识符,可以作为对象的属性键,确保对象的属性键的唯一性和不可变性。 Symbol.for()是Symbol的一个方法,它用于创建一个已经注册的Symbol对象。当使用Symbol.for()创建Symbol对象时,会

    2024年02月10日
    浏览(45)
  • C# 将HTML网页、HTML字符串转换为PDF文件

    将 HTML 转换为 PDF 可实现格式保留、可靠打印、文档归档等多种用途,满足不同领域和情境下的需求。本文将通过以下两个示例,演示如何使用第三方库 Spire.PDF for .NET 和 QT 插件在 C# 中将 Html 网页( URL )或 HTML 字符串转为 PDF 文件。 HTML转PDF所需工具: 1. Spire.PDF for .NET 首先

    2024年01月25日
    浏览(41)
  • 手撕前端面试题【javascript~ 总成绩排名、子字符串频次统计、继承、判断斐波那契数组等】

    html页面的骨架,相当于人的骨头,只有骨头是不是看着有点瘆人,只有HTML也是如此。 css,相当于把骨架修饰起来,相当于人的皮肉。 js(javascripts),动起来,相当于人的血液,大脑等一切能使人动起来的器官或者其他的。 在刷题之前先介绍一下牛客。Leetcode有的刷题牛客都有,

    2024年01月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包