JavaScript编程全解学习日记 一

第五章 变量与对象

5.1 变量的声明

var a = a || 7 //一种习惯用法,如果变量a有了某个值,(可以被转换为true的值)就直接使用,否则把7赋给a.

5.2 函数的参数(值传递)

function changea,b){
    var temp = a;
    a = b;
    b = temp;
}

var one = 1;
var zero = 0;
alert(change(one,zero));  
1 0   //变量的值并未改变

5.3 变量与属性

在js中,变量就是属性。变量可以分为全局和局部变量。全局变量是全局对象的属性。

var x = "foo";
alert(this.x);     //通过this.x 进行访问
foo    

最外层代码中this是对全局对象的引用。可以将this赋值给全局变量global。

var global = this; //global既是全局对象的属性,也是全局对象的引用。

局部变量:是在函数调用时被隐式生成的对象(称为call对象)的引用。

5.14 this引用

※ 在最外层代码中,this引用的是全局对象。
※ 在函数内部,this引用根据函数调用的方式不同而不同。


函数的调用方式 ———————————— > this引用的对象
构造函数调用——————————————>所生成的对象
方法调用 ————————————————>接受放对象

var obj = { x:3,doit:function (){ aleret(this.x)}}
fn = obj.doit;      //将obj.doit引用的function对象赋给全局变量
fn();                       //  函数内this指向全局对象
method is called . undefined  

apply 或call调用—————————————> 有apply或call参数指定的对象

在Function对象中包含apply和call两个方法。它们可以显示的指定接受方对象。

function f (){ alert(this.x)}
var obj = {x:4};
f.apply(obj);       //通过apply调用函数f,函数内部的this指向obj对象
4
f.call(obj);            //同样
4

apply和call的区别是对于其他参数的传递方式,apply的剩余参数通过数组传递。call直接按原样传递。

function f (a,b){alert(a +b)}
f.apply(obj,[1,2])
f.call(obj,1,2)

在实际中,我们通常为了函数回调而使用apply和call
其他方式调用———————————————> 全局对象


5.16 原型链

※ 所有的函数(对象)都具有prototype的属性
※ 所有的对象都含有一个隐形链接,指向在对象生成过程中所使用的构造函数(Function对象)的prototype对象。
所有的对象最终都会具有一个Object.prototype对象的隐式链接。
注意:

function MyClass(){}
var obj = new MyClass();

MyClass.prototype所引用的对象是obj的原型对象。并不是MyClass的原型对象。Function.prototype引用的对象才是MyClass的原型对象。

5.17 对象与数据类型

数据类型判定(constructor属性)

通过对象的constructor属性来从对象处获取其构造函数。

var d = new Date();
alert(d.constructor)
function Date(){
    [native code]
}

注意:constructor属性不是对象的直接属性,而是通过原型链查找到的属性。

function Derived(){};       //派生类
function Base(){};          //基类
Derived.prototype = new Base();
var obj = new Derived();
alert(obj.constructor)
function Base(){
}

与obj.constructor的原型链相连的实体是Derived.protorype.constructor.
数据类型判定(instanceof运算)

var d = new Date();
alert(d instanceof Date)
true

属性的枚举
for in 来枚举属性,都会对原型链进行搜索。若要对直接属性判断时可以用hasOwnProperty方法

forvar name in obj){
    if(obj.hasOwnProperty(name)){
        alert(name)   // 直接属性
   }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值