フロントエンドインタビューの質問--- Object.defineProperty(1)

コードワードは簡単ではなく、役立つ学生は私のWeChat公式アカウントに注意を払うことを望んでいます:コードプログラムライフ、ありがとう!

今日は、Object.definePropertyに関するいくつかのインタビューの質問をあなたと共有します
Object.definePropertyは、フロントエンドにとって非常に重要な知識ポイントです。Vueのコア双方向データバインディングは、Object.definePropertyを介して実現されます。Object.definePropertyは、フレームワークで広く使用されています。

if(a === 1 && a ===2 && a ===3){
    
    
    console.log('You win!!!!');
}
如何进入if语句?

これはAliからのフロントエンドインタビューの質問です。質問は、質問にifステートメントを入力する方法です。aは1に等しく、2に等しく、3に等しい従来の方法では、達成することは絶対に不可能です。このとき、Object.definePropertyが必要です

var _default = 0;
Object.defineProperty(window,'a',{
    
    
    get(){
    
    
        return ++_default;
    }
})
if(a === 1 && a ===2 && a ===3){
    
    
    console.log('You win!!!!');
}

ここに画像の説明を挿入
2.2。

a = 'Object';
console.log(a);
a = 'Array';
console.log(a);
a = '123';
console.log(a);
  
/**
 * {
 *  type:'Object',
 *  length:6
 * }
 * {
 *  type:'Array',
 *  length:5
 * }
 *
 *  TypeError: This type is invalid
*/

タイトル要件:=「オブジェクト」ニーズにより出力されることをコンテンツにconsole.log()であり、最初のオブジェクトアノテーション場合、=「アレイ」、出力される第二のオブジェクトアノテーション場合、a =他の値も、出力TypeError:これは無効なタイプのISです
それでもObject.definePropertyを使用して解決します。

   var _default = null;

   Object.defineProperty(window,'a',{
    
    
       get(){
    
    
           return _default;
       },
       set(newVal){
    
    
        switch(newVal){
    
    
            case 'Object':
            case 'Array':
                _default = {
    
    
                    type:newVal,
                    length:newVal.length
                }
                break;
            default:
                throw new TypeError('This type is invalid');
        }
       }
   })
    a = 'Object';
    console.log(a);
    a = 'Array';
    console.log(a);
    a = '123';
    console.log(a);

ここに画像の説明を挿入
3.3。

console.log(_+_+_+_); //abcde ....z

各_にconsole.logは文字を表しから出発。_、および_が一緒に追加される次の文字を出力継続します。たとえば、タイトルに4つの_追加すると、出力コンテンツはabcdになります。引き続きObject.definePropertyを使用します

Object.defineProperty(window,'_',{
    
    
    get(){
    
       
        this._c = this._c || 'a'.charCodeAt(0);
        var _ch = String.fromCharCode(this._c);

        if(this._c >= 'a'.charCodeAt(0) + 26) return;
        this._c ++;

        return _ch;
    }
})

console.log(_ + _ + _ + _);

ここに画像の説明を挿入

上記の3つの質問は、実際の結果を達成するために他の方法で達成できますが、インタビュアーが調べたい知識ポイントはObject.definePropertyのみです次回同様のトピックを目にしたときは、まずこれに頼りましょう。

本日は3つのトピックをご紹介しますが、今後も更新していきます。


WeChatミニプログラムコースのデザイン、完全なデザインのニーズがあります。個人のQQに連絡してください:505417246

次のWeChatパブリックアカウントに注意してください。WeChatアプレット、Vue、TypeScript、フロントエンド、ユニアプリ、フルスタック、Nodejs、Python、その他の実用的な学習資料を受け取ることができます。
最新かつ最も完全なフロントエンドの知識の概要とプロジェクトのソースコードは、できるだけ早くWeChatに公開されます。いいえ、ご注意ください。ありがとうございます。

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/m0_46171043/article/details/113044999