Bind是用来更改函数运行时的this的
var obj2 = Object.create(null) 不会有Object.prototype
bind之后返回的函数 没有prototype属性
这里有意思了 直接建了一个链表 链表的__proto__指向null(NULL) 没有指向Object.prototype对象
原型链继承逻辑图
原型链继承
原型也是实例 有 __proto__ 属性 指向它的原型
继承实例的图解
不错不错。这图比较好理解。
原型链-继承
原型继承图
原型继承图
原型链截图
原型链-继承
原型链继承的抽象图
var obj = {x:1};
obj.__proto__;//Object{}
Object.getPrototypeOf(obj);//获取obj的原型,Object{}
Object.getPrototypeOf(obj)===Object.prototype;//true
function foo(){}
foo.prototype.__proto__;//Object{}
foo.prototype.__proto__===Object.prototype;//true
obj.toString();//"[object Object]"
object.valueOf();//Object{x:1}
不是所有的对象的原型链上独有Object.prototype
var obj2 = Object.create(null);//这个就没有,这是创建了一个空对象,并且这个对象的原型指向null
也并不是所有的函数对象都会有prototype这个属性
function abc(){};
var binded = abc.bind(null);
typeof binded;//"function"
binded.prototype;//undefined,binded就没有prototype属性。
构造函数有个内置属性name,是不可改写的.实例化的对象没有内置属性name
对象的prototype属性的constructor属性可判断对象的原型是谁,还可以用实例化的obj的constructor属性来实例化新的对象。
通过object.creat(), bind(),创建的对象是一个空对象,没有原型的
继承的写法
懵懵懂懂。。。。
var binded = abc.bind(null);
binded.__proto__ //undefined
获得一个对象上的原型:Object,getPrototypeOf(obj);
基于原型链的继承演示图。
Object.create(sss):创建一个空对象,原型指向sss
不是所有的对象的_proto_都指向prototype,如 var obj1 = Object.Create(null),其中的obj1._proto_就是为空的,也不是所有的函数都有prototype,如function abc(){} var binded = abc.binded(null), 这其中的binded是函数类型,但是没有prototype
原型链