JSのnew操作符

1296 ワード

一、newの使用
構造関数を定義し、newでオブジェクトを作成すると
function Person(){
}

var person = new Person();

console.log(person); // Person{}
この立体関数のプロトタイプを指すオブジェクトを返します.
二、newオブジェクト作成プロセス
紅宝書による説明は以下の4つのステップに分けられます.
  • 新しいオブジェクトを作成します.
  • は、構造関数の関数的スコープを新しいオブジェクトに割り当てます.
  • は、コンストラクタ内のコード(この新しいオブジェクトに属性を追加)を実行します.
  • は新しいオブジェクトを返します.
  • 三、シミュレーションでnew操作を実現する
    // newObj        ,            
    function newObj(fn, ...arg) {
        // 1.       
        var obj = {};
        // 2.                
        obj.__proto__ = fn.prototype;
        // 3.  fn   this    obj
        fn.apply(obj, arg);
        // 4.     
        return obj;
    }
    
     
    function newObj(fn, ...arg) {
        let obj = Object.create(fn.prototype);
        fn.apply(obj, arg);
        return obj;
    }
    次にnewObj関数をテストします.
    function Person(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
    
    //  Person      sayName()  
    Person.prototype.sayName = function() {
        alert(this.firstName + " " + this.lastName);
    }
    
    //       newObj  Person     
    var pitt = newObj(Person, "Bob", "Pitt");
    //   sayName()
    pitt.sayName(); // "Bob Pitt"
    
    //  new         
    var sunny = new Person("Bob", "Sunny");
    sunny.sayName(); // "Bob Sunny"