言簡意賅,告訴你object.create()和new object()區別所在!
1.Object.create(obj)建立的是一個空物件,但是將obj的屬性鍵值對繫結在了建立的新物件的_proto_原型屬性上,相當於綁定了新建立的物件的原型,將物件obj繼承到_proto_屬性上
2.new Object()
(1)是建立一個新的物件,例項化一個新的物件;
完整例子?看這裡咯!???
//定義class,建立一個person建構函式
var Person = function (firstName) { this.firstName = firstName; };
//定義person的method
Person.prototype.sayHello = function() { console.log("Hello, I'm " + this.firstName); };
//例項化物件
var person1 = new Person("Alice");
//例項化的物件呼叫method
person1.sayHello(); // logs "Hello, I'm Alice"
(2)並且使用建構函式初始化新物件的成員變數;將Alice變數做初始化
(3)新的例項化物件的原型為建構函式的prototype物件,即Person.prototype物件。
所以!!!!!
person1.__proto__指向Person.prototy,person1的原型就是Person.prototype。
javascript使用__proto__指向物件的原型。即:
console.log(Person.prototype)// { sayHello: [Function] }
console.log(person1.__proto__) // { sayHello: [Function] }
另外:
Js中只有function才有prototype屬性,即建構函式,直接就可以找到,預設它的prototype屬性值是一個空物件,即{},例如:
var test = function () {return 'haha';};
console.log(test.prototype); // 輸出{}
但物件和陣列是通過其__proto__屬性找到其對應構造方法的prototype