原型对象
原型(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
分享到:
相关推荐
关于javascript的基础知识的总结,适于初学者对Javascript基础知识的理解并掌握
将上传的图片添加防伪图片水印,并将图片直接写入数据库,不...js遇到的问题--转义字符。。FileUpload控件上传资源,需要在本地选择资源时为一个文本框赋值,js判断上传图片格式。。只能输入数字与英文,指定位数小数
javascript中Date format(js日期格式化)方法小结.docx
本文实例总结了JS获取文件大小方法。分享给大家供大家参考,具体如下: 方法一,利用ActiveX控件实现: [removed] function getFileSize(filePath) { var fso = new ActiveXObject("Scripting.FileSystemObject");...
在课堂上学到的JavaScript进行总结,希望可以帮助更多的人,多多分享自己,从而能互相学习,如果写的有错误的地方也希望大家能指正
JavaScript作用小结: 1 创建脚本块 2 隐藏脚本代码 3 浏览器不支持的时候显示
本文是一个学习javascript的新手总结的一些关于javascript的方法,有需要的小伙伴可以参考下。
Javascript执行效率小结.pdf
js编写的小网页,可以实现基本的网页功能
JavaScript键盘事件测试小结,相信可能会对您的工作有一定的帮助作用
JavaScript中的document语句类型比较多,不容易记忆和理解,这是我在网上整理的JS中document用法小结
小结了javascript刷新web页面的几种方法
javascript数组去重小结_.docx
JavaScript事件学习小结(五)js中事件类型之鼠标事件 //www.jb51.net/article/86259.htm JavaScript事件学习小结(一)事件流 //www.jb51.net/article/86261.htm javaScript事件学习小结(四)event的公共成员...
javascript脚本调试方法小结.docx
JavaScript事件学习小结(五)js中事件类型之鼠标事件 //www.jb51.net/article/86259.htm JavaScript事件学习小结(一)事件流 //www.jb51.net/article/86261.htm javaScript事件学习小结(四)event的公共成员...