当看jquery源代码的第一步时,jquery对象的创建只是云里雾里。思考了很久,终于有了一点感觉。记录在这里。
第一种方式:
var A=函数(){ return A . prototype . init();} a . prototype={ init : function(){ this . age=50;console.log(此);归还这个;},age :100 } console . log(A()===new A());
1.分析为什么结果是真的。
a()在内部调用A.prototype.init()函数。
在new A()内部将调用一个构造函数,其构造函数为function(){ return A . prototype . init();},并且还调用了函数A.prototype.init()。
2.分析A.prototype.init()函数返回的内容。
就看这个了。要判断这指向谁,我们应该在调用函数时进行分析。因为它被称为原型对象的属性,所以这是原型对象A.prototype
这样,无论你调用a()多少次,它们都返回同一个对象,所以对b对象的修改会影响a对象,如下图所示。
var A=A();var b=A();console . log(a . age);console . log(b . age);年龄=22岁;console . log(a . age);console . log(b . age);
那么如何解决这个问题呢,我们来说说第二种方式,也是jquery采用的方式。
第二条路
var A=function(){返回新的A . prototype . init();//} a . prototype={ init : function(){ this . age=50;console.log(此);归还这个;},age :100 } a . prototype . init . prototype=a . prototype;//var a=新A();var b=新A();console . log(a===b);console . log(a . age);console . log(b . age);年龄=22岁;console . log(a . age);console . log(b . age);
分析以下和。
new . a . prototype . init()主要做三件事。
创建一个空对象var obj={ };
obj对象的attribute _ prototype _指向函数A.prototype.init的原型;
将A.prototype.init函数的这个替换为obj对象,调用A.prototype.init函数,A.prototype.init.call(obj),返回新对象。
(1)因为返回对象的原型是A.prototype.init.prototype,与A.prototype无关,为了让新返回的对象继承A.prototype,(2)让A.prototype.init.prototype指向a.prototype。
因此,第二种方法不仅创建了一个实例,还确保了它们各自作用域的独立性。
以上是边肖介绍的无新Javascript的例子的详细说明。希望能帮到你以上。如果你想了解更多信息,请关注我们的网站!