js 小结

原型对象

原型(prototype),是JavaScript特有的一个概念,通过使用原型,JavaScript可以建立其传统OO语言中的继承,从而体现对象的层次关系。JavaScript本身是基于原型的,每个对象都有一个prototype的属性来,这个prototype本身也是一个对象,因此它本身也可以有自己的原型,这样就构成了一个链结构。

访问一个属性的时候,解析器需要从下向上的遍历这个链结构,直到遇到该属性,则返回属性对应的值,或者遇到原型为null的对象(JavaScript的基对象Object的prototype属性即为null),如果此对象仍没有该属性,则返回undefined.

对象的声明有三种方式:



Ø 通过new操作符作用域Object对象,构造一个新的对象,然后动态的添加属性,从无到有的构筑一个对象。

Ø 定义对象的“类”:原型,然后使用new操作符来批量的构筑新的对象。

Ø 使用JSON,这个在下一节来进行详细说明
函数作用域
作用域的概念在几乎所有的主流语言中都有体现,在JavaScript中,则有其特殊性:JavaScript中的变量作用域为函数体内有效,而无块作用域

call和apply

call和apply通常用来修改函数的上下文,函数中的this指针将被替换为call或者apply的第一个参数,只有一个参数的时候call和apply的使用方式是一样的,而多个apply的第二个参数为一个函数需要的参数组成的一个【】数组,而call则需要跟若干个参数,参数之间以逗号(,)隔开即可。我们不妨来看看2.1.3小节的例子:
<script>
//定义一个人,名字为jack
var jack = {
name : "jack",
age : 26
}

//定义另一个人,名字为abruzzi
var abruzzi = {
name : "abruzzi",
age : 26
}

//定义一个全局的函数对象
function printName(){
return this.name;
}

//设置printName的上下文为jack, 此时的this为jackcall 方法
//调用一个对象的一个方法,以另一个对象替换当前对象。
//call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
document.write(printName.call(jack)+"<br>");
//设置printName的上下文为abruzzi,此时的this为abruzzi
document.write(printName.call(abruzzi)+"<br>");


//定义一个"类",Address
function Address(street, xno){
this.street = street || 'Huang Quan Road';
this.xno = xno || 135;
this.toString = function(){
return "street : " + this.street + ", No : " + this.xno;
}
}

//定义另一个"类",Person
function Person (name, age, addr) {
this.name = name || 'unknown';
this.age = age;
this.addr = addr || new Address(null, null);
this.getName = function () {return this.name;}
this.getAge = function(){return this.age;}
this.getAddr = function(){return this.addr.toString();}
}

//通过new操作符来创建两个对象,注意,这两个对象是相互独立的实体
var jack = new Person('jack', 26, new Address('Qing Hai Road', 123));
var abruzzi = new Person('abruzzi', 26);

//查看结果
document.write(jack.getName()+"<br>");
document.write(jack.getAge()+"<br>");
document.write(jack.getAddr()+"<br>");

document.write(abruzzi.getName()+"<br>");
document.write(abruzzi.getAge()+"<br>");
document.write(abruzzi.getAddr()+"<br>");


var obj = {
name : "abruzzi",
age : 26,
birthday : new Date(1984, 4, 5),
addr : {
street : "Huang Quan Road",
xno : "135"
}
}

document.write(obj.name+"<br>");

function p(){
document.write("invoke p by ()");
}

p.id = "func";
p.type = "function";

document.write(p+"<br>");
document.write(p.id+":"+p.type+"<br>");
document.write(p());


var str = "global";
function scopeTest(){
document.write(str+"<br>");
var str = "local";
document.write(str+"<br>");
}

scopeTest();

</script>


声明:本文内容来源于http://www.iteye.com/wiki/javascript-core/2274-JavaScript-Core
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值