開発者ツールで入力候補に__loopupGetter__
や__defineSetter__
等のなんだか没そうなメゾッドがあります。
これってなんでしょう???
これは?
オブジェクトに自動でつくメゾッドです。
正確にはObject.prototypeで宣言されたメゾッドです。
ことわり
これらのメゾッドは全て非推奨です。また、代替はあるため使わないで下さい。
__defineGetter__
そのオブジェクトのゲッター、内容を取得する関数を宣言します。
例
let a = {}
a.__defineGetter__("b",()=>"c")
console.log(a.b) //c
代替
let a = {}
Object.defineProperty(a,"b",{
get:()=>"c"
})
console.log(a.b) //c
__defineSetter__
そのオブジェクトのセッター、内容を入力する関数を宣言します。
例
let a = {}
let _b = ""
a.__defineSetter__("b",val=>{_b = "The " + val; return true})
a.__defineGetter__("b",()=>_b)
a.b = "End"
console.log(a.b) //The End
代替
let a = {}
let _b = ""
Object.defineProperty(a, "b", {
get: ()=>_b,
set: val=>{_b = "The" + val;return true}
})
a.b = "End"
console.log(a.b) //TheEnd
__lookupGetter__
そのオブジェクトのゲッター関数を取得します。関数宣言がなければundefinedです。
例
let a = {}
a.__defineGetter__("b", ()=>29)
console.log(a.__lookupGetter__("b"))
//()=>29
代替
let a = {}
Object.defineProperty(a,"b",{
get:()=>29
})
console.log(Object.getOwnPropertyDescriptor(a,"b").get)
//()=>29
__lookupSetter__
そのオブジェクトのセッター関数を取得します。関数宣言がなければundefinedです。
例
let a = {}
let __b = ""
a.__defineSetter__("b",val=>{__b="The "+val;return true})
console.log(a.__lookupSetter__("b"))
//val=>{__b="The "+val;return true}
代替
let a = {}
let __b = ""
Object.defineProperty(a,"b",{
set:val=>{__b = "The " + val;return true}
})
console.log(Object.getOwnPropertyDescriptor(a,"b").set)
//val=>{__b = "The " + val;return true}
仕様について
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/lookupGetter
これによると仕様書では実装の要求はないようですが、主要なブラウザーでは
このすべてが実装されており、削除される可能性は低いそうです。しかし、代替はありますし
仕様的に非推奨なのでObject.xxx
のやつを使いましょう。