分析 js构造函数:对象方法 、类方法 、原型方法
2019-04-26 08:20:35来源:博客园 阅读 ()
构造函数方法有对象方法、类方法、原型方法,这些方法在什么时候可以调用,什么时候不能调用,为什么?
function Func(name){ this.name=name; this.ff=function(){ //对象方法 console.log(this.name); }; } Func.ff2=function(name){//类方法 console.log(name); } Func.prototype.ff3=function(){//原型方法 console.log(this.name); };
直接调用
这种情况下只有类方法能直接使用
Func.ff(); //VM1239:12 Uncaught TypeError: Func.ff is not a function Func.ff2('jack');//jack Func.ff3();//Uncaught TypeError: Func.ff3 is not a function
1.函数里this指向是由函数执行时的执行上下文也就是执行环境决定的,并不是由定义它的函数决定的 ,所以this并不是直接指向函数Func,也就说函数内部的this.ff != Func.ff。
2.Func是一个函数也是一个对象,ff2是这个对象的一个方法,所以可以调用。
3.Func.prototype.ff3,这个ff3是Func的prototype属性的方法,只有实例才可以访问。而Func的构造函数是Function,它的原型并没有这个方法,所以报错。如果这样用【Func.prototype.ff3()】是可以调用到的。或者这样定义【Function.prototype.ff3=function(){};】,这样才能在Func的构造函数的原型上搜索到ff3,就能Func.ff3()调用。
原型链查找机制,是先在对象内查找属性和方法,若没有找到则沿着原型链往上找,如果找到头都没找到,那就是没有这个属性或者方法。
实例调用
这种情况下,实例方法和原型方法都可以用,但是类方法不能用。
var nff=new Func('jack'); nff.ff(); //jack nff.ff2('jack');//VM1257:12 Uncaught TypeError: nff.ff2 is not a function nff.ff3('jack');//jack
1.使用new实例化Func以后得到实例nff,函数内部的this指向的就是实例本身,所以此时的this.ff==nff.ff。但是我们只能说this.name和this.ff的this就是nff,而this.ff内部的this依然是由执行上下文决定。
2.实例nff的私有空间内没有ff2这个方法,原型链上也没有,所以报错。
3.实例nff上没有ff3,但是ff3的原型Func.prototype上有
关于这里的第1条,可以证明下,请看。
不管是直接执行TT(),还是TT.ff(),第一个this就是实例本身,而第二个this是依据执行环境决定的,可以对比下面两个图看得出来。
总结:
1.类方法属于构造函数私有的方法,可以直接使用。
2.对象方法和原型方法,只有实例化之后才可以使用。实例化之后,不继承类方法。
这个我也不是太懂,如果有幸被大佬看到,还请帮忙指点下。
原文链接:https://www.cnblogs.com/zyskr/p/10769792.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- JavaScript函数表达式详解及实例 2020-03-25
- 带你了解JavaScript中的函数 2020-03-08
- 详谈构造函数加括号与不加括号的区别 2020-01-17
- JavaScript匿名函数与委托使用示例 2020-01-07
- JavaScript中的apply和call函数详解 2020-01-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash