1. 程式人生 > >js面向物件1--瞭解建構函式

js面向物件1--瞭解建構函式

一、建構函式與例項的區別

  1. 建構函式

    1.1. 建構函式主要是一種用於生成物件的餅乾模具,這些物件具有預設屬性和屬性方法,它可以建立多個共享特定特性和行為的物件。

    1.2. 建構函式只是一個函式,但當函式遇到了new,就發生了一些微妙的關係,它會將該函式的this值設定為正在構建的新物件,並且預設返回新建立的物件。

  2. 建構函式例項

    2.1. 在js中,大多數值(不包括原始值)都涉及正在被建立的物件,或者是從建構函式例項化的物件。建構函式返回的物件被稱為例項。

舉個例子:

    var Person = function Person(living,
age, gender) { this.living = living; //this表示即將建立的新物件 this.age = age; this.gender = gender; this.getGender = function () { return this.gender; }; }; var yangnan = new Person(true, 20, "woman"); //例項化Person物件 console.log(yangnan); //例項是賦值後的物件
/* Person(){}例項物件擁有_proto_ 指的是建構函式的原型prototype, 其有constructor,指向建構函式Person */ console.log(typeof yangnan); //object 例項是物件 console.log(yangnan.constructor);

二、建構函式return

  1. return 是值型別會被忽略
function A() {
    this.a = "a"; //建構函式中this繫結新建立的物件,是為改物件新增屬性
    return 1;  
}
var
a = new A(); console.log(a); // {a:"a"} ,此時值型別1會忽略了,就好像不存在
  1. return是引用型別,會覆蓋新建的物件
function A() {
    this.a = "a"; 
    return {
        x: 1,
        y: 2
    };
}
var a = new A();
console.log(a); //{x:1,y:2} ,本來例項物件是{a:"a"},return是引用型別覆蓋了