美文网首页
关于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. 返回新对象

    相关文章

      网友评论

          本文标题:关于Symbol

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