在javascript中使用“get”和“set”作为属性名称是否安全?

时间:2018-04-07 20:24:20

标签: javascript

使用get并将其设置为对象文字的属性名称通常是安全的,如下所示:

var myObject={
    get: 'value1',
    set: 'value2'
}

获取并设置似乎不是javascript中的保留字,但我担心这可能会导致与某些内置行为发生冲突。特别是get和set似乎有一些pretty unique behavior in the Object.defineProperties method

Object.defineProperties(someObject,{
    'Property1':{
        get:function(){
            return property1;
        },
        set:function(val){
            property1=val;
        },
        enumerable:true;
    }
});

在此内置行为中,getset不会被视为普通属性,但在访问或分配someObject.Property1时实际执行其各自的功能。

由于它们在Object.defineProperties中的使用方式,我总是将getset视为特殊保留字。所以我的问题是,这是一个很好的经验法则,还是我应该学会停止担心,只要在语义上看起来合适就使用getset

3 个答案:

答案 0 :(得分:3)

是的,这很安全。 getset始终被视为普通属性。它们用于在属性描述符中定义getter和setter这一事实完全无关紧要。

不安全属性的一个例子是valueOf,因为它实际上改变了对象的行为方式:

console.log(+{}); // NaN
console.log(+{ valueOf: () => 5 }); // 5

答案 1 :(得分:2)

architecture Behavioral of system is alias instruction_opcode : std_logic_vector(3 downto 0) is instruction(15 downto 12); begin end architecture; function addToCalendar(sport, date, time){ var sportName = String(sport); Logger.log(sportName.includes("Soccer")); } 是您传递给get的对象中有效属性的事实证明使用setObject.defineProperties是安全的财产名称。

唯一一次getset在JavaScript中具有特殊含义的是当您创建gettersetter时,但语法不同,所以与财产名称没有冲突。

答案 2 :(得分:0)

javascript described中的setter getter机制,我没有看到任何冲突或理由认为它不安全,除非其他人也这样做,所以要小心覆盖其他库,以便它是好的去。