コンストラクタの高レベル関数のスコープの安全性

コンストラクタは知っています。new演算子を使用して関数呼び出しがあります。新しいコールは、このオブジェクトは、新しく作成されたオブジェクトインスタンスにコンストラクタポイントで使用されている場合。

function Person(name,age,job) {
    this.name = name;
    this.age = age;
    this.job = job;
}
let person = new Person('yk',27,'software Engineer')

上記の例では、Personこのオブジェクトのコンストラクタは3つのプロパティ、名前、年齢、ジョブを割り当てるために使用されます。新たな問題が存在しない場合には直接呼び出されたときに、これは上記のグローバルウインドウにマッピングされています。この問題を解決することができますスコープの安全コンストラクタを作成します。

function Person(name,age,job) {
    if(this instanceof Person) {
            this.name = name;
            this.age = age;
            this.job = job;
    } else {
        return new Person(name,age,job)
    }
}

EG2:

function Polygon(sides) {
    if(this instanceof Polygon) {
        this.sides = sides;
        this.getArea = function() {
            return 0; } } else { return new Polygon(sides) } } function Rectangle(width,height) { Polygon.call(this, 2); this.width = width; this.height = height; this.getArea = function() { return this.width * this.height; } } let rect = new Rectangle(5, 10); alert(rect.sides) //undefined 

スコープポリゴンコンストラクタが安全であるように、これはオブジェクトのPolygonインスタンスではありません、それは新しいポリゴンオブジェクトを作成して返します、このRectangleオブジェクトのコンストラクタは、成長していません。一方Polygon.call値は、長方形のプロパティインスタンス辺が存在するであろうように、無駄に()を返します。

function Polygon(sides) {
    if(this instanceof Polygon) {
        this.sides = sides;
        this.getArea = function() {
            return 0; } } else { return new Polygon(sides) } } function Rectangle(width,height) { Polygon.call(this, 2); this.width = width; this.height = height; this.getArea = function() { return this.width * this.height; } } Rectangle.prototype = new Polygon(); let rect = new Rectangle(5, 10); alert(rect.sides) //2 

スキャンコードプラスグループは、毎日一緒に成長する記事のフロントエンド技術を更新します。

 

おすすめ

転載: www.cnblogs.com/bbqq1314/p/12545478.html