美文网首页
关于Symbol

关于Symbol

作者: jluemmmm | 来源:发表于2020-09-22 12:51 被阅读0次

实现一个symbol,需要满足以下条件:

  1. 返回的值不能相同
  2. 无法作为构造函数调用
  3. symbol.for 接受一个字符串作为参数,搜索是否有以该字符串作为名称的symbol值,如果有,返回该symbol值,否则返回一个新的symbol值
function symbol(str) {
   if (this instanceof symbol) {
     throw Error('不能做为构造函数调用')
   }
   return generate(str)
}
var generate = (function(){
  var pos = 0
    return function(str){
    pos++
    return str + '_' + pos
  }
})()

function symbol.for = function(str){
  return str
}

symbol.for('s') === symbol('s')
// false

symbol.for('s') === symbol.for('s')
// true

判断一个函数是否被当作构造函数调用

  • instanceof用于检测构造函数的prototype属性是否出现在某个实例的原型链上,当一个函数被构造函数调用时,this instanceof FuncName 为true
  • argumnets.callee指向函数体内当前正在执行的函数,如果this.constructor === argumnets.callee

Object.getPrototypeOf()返回指定对象的原型。用这个方式是不能够判断一个函数是否被当作构造函数调用的。

Object.getPrototypeOf(Symbol) === Function.prototype

isPrototypeOf判断一个对象是否在另一个对象的原型链上

Function.prototype.isPrototypeOf(Symbol)
// true

再复习一遍使用new操作符调用构造函数经历的四个过程:
1. 创建一个新对象
2. 将构造函数的作用域赋给新对象,此时this指向新对象
3. 执行构造函数中的代码,为新对象添加属性
4. 返回新对象

相关文章

  • iOS Crash及其符号化

    符号 维基百科关于符号(Symbol)定义: A symbol in computer programming i...

  • 关于Symbol

    实现一个symbol,需要满足以下条件: 返回的值不能相同 无法作为构造函数调用 symbol.for 接受一个字...

  • 关于duplicate symbol的思考

    关于duplicate symbol的思考 iOS 开发中经常会遇到duplicate symbol这个问题,在编...

  • python实现逆波兰计算表达式的代码

    如下资料是关于python实现逆波兰计算表达式的代码。 symbol_priority = {} symbol_p...

  • Symbol

    Symbol 每个Symbol都是独一无二的Symbol() !== Symbol() Symbol 不能进行运算...

  • Symbol

    1、window.Symbol 2、不允许new Symbol 3、symbol() !== symbol() 4...

  • Symbol学习笔记

    一.Symbol是什么 typeof Symbol() === 'symbol',symbol是js中第7种基本类...

  • ES6补充以及Node事件轮询

    Symbol es6中新增了symbol类型,symbol类型的值是通过symbol函数生成的,相同symbol函...

  • 关于symbol的理解

    1.防止对象属性名或对象方法名冲突 比如,你使用了一个他人提供的对象,但又想为这个对象添加新的属性(方法),新属性...

  • 深入理解ES6六

    Symbol ES6新增的数据类型Symbol 创建Symbol:通过去全局的Symbol函数创建一个Symbol...

网友评论

      本文标题:关于Symbol

      本文链接:https://www.haomeiwen.com/subject/nvlvyktx.html