-
9-11查看全部
-
9-10 修改prototype后,对已经创建的对象没有影响,但是影响后续创建的对象的值 修改类.prototype.属性时,会影响所有已经创建的实例,相当于修改静态变量; 但是直接修改类.prototype,赋值为新的对象时,并不会影响到已创建的实例,但是会对之后新创建的实例有影响。分别对应图中的第一、二、三部分。查看全部
-
9-9查看全部
-
9-8查看全部
-
9-7查看全部
-
9-6查看全部
-
9-5查看全部
-
9-5 Object.create("参数"); 创建一个空对象,并且对象的原型指向它的参数 Person是父类的构造函数,Student是子类的构造函数。这里子类Student继承了父类的属性。 function Student(name, age, className){ Person.call(this, name, age); this.className = className; } //这段函数使Student继承了Person的属性。Person.call(this, name, age);也可以写为Person.call(this, arguments); Student.prototype = Object.create(Person.prototype); Student.prototype.constructor = Student; //这段函数使Student的原型继承了Person的原型。使用Objet.create是为了不让Student.prototype和Person.prototype指向同一个对象。 这个例子中的name, age, className为私有属性,写在构造函数中。原型中的LEGS_NUM和ARM_NUM为共有属性。所有新生成的实例共享共有属性。比如 var bosn=new Student('Bosn', 27, 'class 3, grade 2'); var olderBosn=new Student('Older Bosn', 28, 'class 3, grade 2'); bosn.LEGS_NUM == olderBosn.LEGS_NUM; //true查看全部
-
9-4 Foo函数有一个prototype的对象属性,它的作用是在当使用 new Foo()去构造父的实例时,Foo.prototype属性会作为new(构造)出来的对象的原型。prototype和原型是两回事,prototype是函数对象上预设的对象属性,而原型通常是obj3对象上的原型,指向构造器的prototype属性/是构造器的prototype属性。 2、用一个function a()作为父类构造函数,并为该函数的prototype作为父类封装变量和方法,同时使用Object.create(a.prototype)继承,子类b可使用a.call(对象,参数)的方法来调用父类的构造函数并可重写父类的函数,需注意,重写时需写在b的prototype上,这样才是对象方法,否则直接写在b上则算作静态方法 注:call()第一个参数是被调用的对象!!查看全部
-
9-3查看全部
-
9-2查看全部
-
9-1查看全部
-
bind方法模拟 在不支持ES5的浏览器里模拟bind方法 几个注意地方: 1.var aArgs=Array.prototype.slice.call(arguments,1);//这里的arguments是相对function(oThis)而言的,也即对应的是oThis这个参数,这个oThis又是对应bind()里面的参数的,由于bind()第一个参数是对象,后面还可以是用于currying的参数,所以通过slice将后面的参数获取。由于arguments不是标准的数组,需通过数组原型链的调用来使用slice方法。 2.aArgs.concat(Array.prototype.slice.call(arguments)) //这里的arguments是对应fBound=function()这个匿名函数的,而fBound作为最后的返回,对应的是函数bind后赋给的变量(函数),后者再次调用时传入的参数就是这里的arguments,将上面currying的参数并上后面再传入的参数,才组成最开始的函数的参数this/fToBind。 3.fNOP空对象是为了作为通过new之后消除bind作用后函数中this指向空对象的原型链准备。而通过this instanceof fNOP来判断是否使用了new,并决定将对象bind上。没用new,则判断为false,bind(oThis);否则为true,即使用new,函数中this指向空对象。查看全部
-
bind与new bind之后,重新new一遍,会将bind的作用消除,那么函数调用时就没有bind里的参数传入,函数的this被重置为一个空对象,函数的return将被忽略,返回的将是this对象查看全部
-
bind与currying颗粒化,即将函数分段 bind(undefined,arg1),函数的第一个参数将被赋值为arg1,然后将该方法赋给一个变量,后面调用该变量时,传入的参数将赋值给第一个参数以后的参数,从而达到分段的目的。如果重复bind(),函数的参数将陆续被赋值。一个可绑定多个参数查看全部
举报
0/150
提交
取消