面试题:(考察构造函数、对象、实例函数、代码执行顺序等知识点)

案例(注意:注释不一定正确,仅供参考):

function foo() {
     foo.a = function() {
         console.log(1);
     };//给foo添加属性。
     this.a = function() {
         console.log(2);
     };
     // 不推荐使用无var的声明方式
     a = function() {
         console.log(3);
     };//foo函数执行的时候,先给a赋值,然后被下一句覆盖。注意:如果没有下一句代码,这一句代码等于给全局声明了一个a函数。
     var a = function() {
         console.log(4);
     };//预解析,变量提升,foo函数执行的时候,上一句代码先给a赋值,然后这一句再覆盖。
 };
 foo.prototype.a = function() {
     console.log(5);
 };//new 的实例才会有此方法
 foo.a = function() {
     console.log(6);
 };//此时foo作为对象使用,这句代码给对象foo添加了一个a属性,该属性值为一个方法
 foo.a();//6,调用对象的属性
 var obj = new foo();//new了实例,此时foo是作为构造函数使用,该实例具有构造函数原型上的方法。并且这句代码执行后改变了对象foo的a属性,因为这句代码是在foo.a = function() {console.log(6);};这句代码后边执行的。
 obj.a();//2,自身有a不会再去原型上找了。
 foo.a();//1,被new实例的时候修改了a属性。

知识点:

1,赋值操作会执行。

2,在构造函数中声明的变量在实例函数中是访问不到的。

3,自调用函数、匿名函数,定时器,计时器里面的this都是指向window


以上内容仅作为个人学习记录使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值