变量提升 this 构造函数 公有私有方法

1 function Foo() {
    getName = function () { alert (1); }; //定义静态属性 没有用var来声明 会修改window下getName的值
    return this; this的指向是由调用的方式决定的 函数调用的方式this指向window 对象下的方法调用指向对象
}
2 Foo.getName = function () { alert (2);};//为静态属性改值
3 Foo.prototype.getName = function () { alert (3);};
4 var getName = function () { alert (4);};解析时不会变量提升 执行时赋值
5 function getName() { alert (5);} 解析时变量提升 执行时什么也不做
 
//请写出以下输出结果:
Foo.getName();//静态属性的值 2
getName();只和4,5有关 预解析时函数表达式不会变量提升 函数声明会变量提升 执行时按照预解析顺序执行 执行时遇到函数表达式赋值 遇到函数声明什么也不做 所以getname()执行的是getName = function () { alert (4);}
Foo().getName(); 1 getname是私有静态属性 实例不能调用 可以通过函数调用的方式使用 注意此时没有var声明 会修改window下getName的值
getName();
new Foo.getName(); new (foo.getname())() 2
new Foo().getName(); new Foo()实例下没有getname方法 去原型中查找 3
new new Foo().getName(); 实例下的getname()没有 去原型中找 将原型中的方法实例化

 

function User(name) {
	var name = name; //私有属性
	this.name = name; //公有属性 通过this prototype定义的是公有的属性和方法,并且必须通过实例化才可以使用
	function getName() { //私有方法 函数内部的私有属性和方法 实例不可以使用 通过函数调用的方法可以直接使用
		return name;
	}
}
User.prototype.getName = function() { //公有方法
	return this.name;
}
User.name = 'Wscats'; //静态属性
User.getName = function() { //静态方法
	return this.name;
}
var Wscat = new User('Wscats'); //实例化

注意下面这几点:

  • 调用公有方法,公有属性,我们必需先实例化对象,也就是用new操作符实化对象,就可构造函数实例化对象的方法和属性,并且公有方法是不能调用私有方法和静态方法的

  • 静态方法和静态属性就是我们无需实例化就可以调用

  • 而对象的私有方法和属性,外部是不可以访问的

函数表达式和函数声明
js预解析 函数声明会变量提升  函数表达式不会变量提升
js执行时按照预解析的顺序进行执行 遇到函数调用执行 遇到函数表达式赋值 遇到函数声明什么也不做
getName() //oaoafly              1                                      执行时在预解析的顺序里执行 返回oaoafly
var getName = function() {       2 预解析getname=undefined               执行给getname赋值=function(){wscat}
	console.log('wscat')
}
getName() //wscat                3                                      执行返回wscat
function getName() {             4预解析getname=function(){oaoafly}      执行遇到函数声明什么也不做
	console.log('oaoafly')
}
getName() //wscat                5                                      执行返回wscat

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值