手机版

没有新建筑示例的Javascript详细说明

时间:2021-10-30 来源:互联网 编辑:宝哥软件园 浏览:

当看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的例子的详细说明。希望能帮到你以上。如果你想了解更多信息,请关注我们的网站!

版权声明:没有新建筑示例的Javascript详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。