比較new和object.create
建構函式
new: 保留原建構函式屬性
object.create:丟失原建構函式屬性
原型鏈new: 原建構函式prototype屬性
object.create:原建構函式/(物件)本身
作用物件
new: function
object.create:function和object
var base = function () {}
var o1 = new base()實際上執行的是:
var o1 = new object();
o1.__proto__ = base.prototype;
base.call(o1);//訪問建構函式
而var o2 = object.create(base);實際上執行的是:
var f = function () {};
f.prototype = base;
return new f();
兩者關係:
function constructor(){}
o = new constructor();
// 上面的一句就相當於:
o = object.create(constructor.prototype);
constructor.call(o);
isprototypeof實現方式:
function isprototypeof(o1,o2)
f.prototype = o2;
return o1 instanceof f;
}//繼承 fn 的原型鏈,fn相當於fn1的父類了
function fn(){};
function fn1()
fn1.prototype = object.create(fn.prototype);//原型繼承
__proto__指向的是這個物件的建構函式的prototype.
(b.__proto__==b.prototype)答案為true;
1.每乙個建構函式都有乙個prototype屬性,稱之為顯式原型;
2.每乙個引用型別都有乙個__proto__屬性,稱之為隱式原型;
3.每乙個引用型別的__proto__指向他的建構函式的prototype;
function fn(){};
fn.prototype.constructor==fn//true
建構函式是類的公共標識,原型物件是類的唯一標識
class a
class b extends a
b.__proto__ === a // true
b.prototype.__proto__ === a.prototype // true
object.setprototypeof(b.prototype, a.prototype);
// 等同於
b.prototype.__proto__ = a.prototype;
object.setprototypeof(b, a);
// 等同於
b.__proto__ = a;
b.prototype = object.create(a.prototype);
// 等同於
b.prototype.__proto__ = a.prototype;
class a
a.__proto__ === function.prototype // true
a.prototype.__proto__ === object.prototype // true
js的原型 原型鏈 建構函式
js裡一切皆物件。有js自己內部的物件,還有使用者自定義的物件。所有的物件都是從原型上衍生出來的。原型本身也是物件,原型鏈的最高層就是object。兩個重要的屬性 prototype,proto 所有的物件都有 proto 屬性,通過.proto 一層一層,最後到達object,object的 pr...
js關於原型建構函式和原型鏈的理解
js的物件導向方式的函式有很多種方式,其中有兩個比較重要的是兩種方式一是建構函式模式,一是原型模式。1 建構函式模式如 function persion name,age var person1 new person alex 29 person1.sayname alex var person2 ...
javascript原型和原型鏈,建構函式和例項
原型 建構函式 就是工廠,原型的例項就是工廠按照圖紙生成的工具 比如汽車 原型鏈 隱式的 就是生成的工具所具有的功能,而功能是工具的屬性,生成什麼樣的工具是由工廠 建構函式 決定的,圖紙是有工廠和客戶共同決定的 var ca ctory function options this.stop func...