0
0

開発者ツール使ってると目に付く__loopupGetter__ってなんだ!?

Posted at

開発者ツールで入力候補に__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のやつを使いましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0