JavaScript 中级笔记 第五章 面向对象的基础

一,面向对象的基础
对象是JavaScript的基础。从最基本的层次上说,对象是一系列属性的集合。
1,对象的创建

//创建一个新的Object对象,存放在obj变量中
var obj1 = new Object();
//设置属性
obj1.value = 5;
obj1.click = function(){
alert("Hello");
}
//另一种方式定义一个对象,以键值(key/value)的方式定义属性
var obj2 = {
value : 5,
click : function(){
alert("Hello");
}
};

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

相信很多朋友对这些创建对象的方式接触过很多次了,都很熟悉了。
2,对象的使用
和其他面向对象语言不同的是,JavaScript没有类的概念。在JavaScript里,任何函数都可以被实例化为一个对象。

//一个简单的函数,接受名称并将其放入当前上下文中
function User(name){
this.name = name;
}
var me = new User("cssrain");//指定名称来创建该函数的一个新对象
alert( me.name );//"cssrain"
alert( me.constructor == User );//true
//如果把User当作函数
User("peter");
alert( window.name );//因为它的this上下文对象未设定,所以默认是全局的window对象

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

本段代码通过new User()来创建函数的一个新的对象。创建出的新对象拥有name属性,并且construtor属性指向创建它的函数。
3,公共方法
公共方法是在对象的上下文中用户始终可以接触到的。要实现这种方法,需要用到原型属性——prototype。
对象的原型仍然是对象。给原型对象添加属性后,由该原型实例化的每个对象都可以访问这些属性,即这些属性都是公有化的。

//一个简单的函数,接受名称并将其放入当前上下文中
function User(name){
this.name = name;
}
//将一个新的函数添加到此对象的prototype对象中
User.prototype.getName = function(){
return this.name;
}
var me = new User("cssrain");//指定名称来创建该函数的一个新对象
alert( me.getName() ); //"cssrain"

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

4,私有方法
这个还比较好理解。字面意思是只能在内部访问。

//一个简单的函数,接受名称并将其放入当前上下文中
function User(name){
this.name = name;
function disp(){
alert("User()函数 私有的");
}
//只能内部调用
disp();
}
var me = new User("cssrain");//指定名称来创建该函数的一个新对象
//me.disp();//不能调用
//disp();//不能调用

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

5,特权方法
它是以公共的方式访问私有变量。

function User(name,age){
//私有变量
var year = (new Date()).getFullYear()-age;
//创建一个特权方法,能够访问year变量,同时属于公共可访问
this.getBornYear = function(){
return year;
}
}
var me = new User("cssrain",22);//指定参数来创建该函数的一个新对象
alert( me.getBornYear() );//"1986"

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

本质上,特权方式是动态生成的。因为它们是在运行时才添加到对象中的,而不是在代码第一次编译时就已经生成。
这种动态生成代码的能力不可小视,能根据与你想那个时变量来生成代码是非常有用的。看下面动态生成方法的例子:

function User( users ){
for(var i in users){//遍历所有的属性
(function(method){
var p = i;
method["get"+p]=function(){//创建此属性的一个读取函数
return users[p];
}
method["set"+p]=function(val){//创建此属性的一个设置函数
users[p] = val;
}
})(this);
}
}
var me = new User({name : "cssrain", age : 22});//指定参数来创建该函数的一个新对象
alert( me.getname() );//"cssrain"
alert( me.getage() );//"22"
me.setname("changeCssRain");
me.setage(23);
alert( me.getname() );//"changeCssRain"
alert( me.getage() );//"23"

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

6,静态方法
静态方法的实质跟一般函数没有什么不同,静态方法能保证对象的命名空间的整洁。

function User(name,age){
this.name = name;
this.age = age;
}
//添加到一个User对象的静态方法
User.cloneUser = function(user){
//创建并返回一个新的User对象
return new User( user.name , user.age );
}
var u = User.cloneUser({name:"cssrian",age:22});
alert(u.name);//"cssrain"
alert(u.age);//22

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

二,小结
理解本章所描述的概念和内容是非常重要的, 这是完全掌握专业JavaScript的起点。

(0)

相关推荐

  • JavaScript 中级笔记 第五章 面向对象的基础

    一,面向对象的基础 对象是JavaScript的基础.从最基本的层次上说,对象是一系列属性的集合. 1,对象的创建 //创建一个新的Object对象,存放在obj变量中 var obj1 = new Object(); //设置属性 obj1.value = 5; obj1.click = function(){ alert("Hello"); } //另一种方式定义一个对象,以键值(key/value)的方式定义属性 var obj2 = { value : 5, click : f

  • JavaScript 中级笔记 第四章 闭包

    5,闭包 闭包意味着内层的函数可以引用存在于包围它的函数内的变量,即使外层函数的执行已经终止. 让我们先来看一个闭包的例子. function add(num){ return function(toAdd){ return num+toAdd; //代码① } } var addFive = add(5); //此时addFive为function(toAdd){return num+toAdd;} var count = addFive(3); //此时count为 num+toAdd al

  • JavaScript 中级笔记 第三章

    3,作用域 所有的面向对象的语言都有某种形式的作用域,JavaScript也不例外.在JavaScript里,作用域是由函数划分的,而不是由块(while,if之类的)来划分的. 我们先来看一个简单的作用域的例子. var foo = "a"; //设置全局变量foo if(true){ var foo = "b";//在if块中,把foo的值改为b,注意:此时还在全局作用域中 } alert(foo); [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]

  • MYSQL必知必会读书笔记第五章之排序检索数据

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 其实,检索出的数据并不是以纯随机顺序显示的.如果不排序,数据一般将以它底层表现中出现的顺序显示.这可以是数据最初添加到表中的顺序.但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响.因此,如果不明确控制的话,不能依赖该排序顺序. 在多个列上将序排列 :如果想在多个列上进行将序排列,必须每个列指定DESC关键字

  • JavaScript 中级笔记 第一章

    一,回顾 首先先来回顾下DOM和事件. 1,DOM DOM在JavaScript中是应用最广泛的,大部分Web开发的编程语言都提供了相关的实现.给了开发者一个统一的接口. 看下面的例子: demo /* 示例操作DOM元素 */ window.onload = function(){ //给Dom元素添加颜色 var li = document.getElementsByTagName("li"); for(var i=0;i 李老师-英语 张老师-数学 刘老师-物理 [Ctrl+A

  • JavaScript 中级笔记 第二章

    1,引用 引用是一个指向对象实际位置的指针.看下面的使用引用的例子: /*示例引用*/ var obj = new Object(); //定义一个空对象 var newObj = obj; //定义一个新对象引用. obj.name = "rain";//修改原对象的属性 alert( newObj.name ); alert( obj.name == newObj.name );//由此可以证明它们是引用的同一个对象 [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 本例

  • javascript学习笔记(五)原型和原型链详解

    私有变量和函数 在函数内部定义的变量和函数,如果不对外提供接口,外部是无法访问到的,也就是该函数的私有的变量和函数. 复制代码 代码如下: <script type="text/javascript">     function Test(){         var color = "blue";//私有变量         var fn = function() //私有函数         { }     } </script> 这样在

  • JavaScript DOM 学习第五章 表单简介

    因为每一个表单的检测项都不同,所以我也不能给你一个万能的代码.你需要用我在这一章介绍的这些元素构建自己的检测函数.我在后面一张还有一个例子,你也可以参考. 在这一章我会首先讨论一下用JavaScript来检测表单的局限性,然后会解释一下提交时间处理程序,然后是表单本身的一些方法和属性.最后就是如何访问表单元素. 这里还有一篇Jeff Howden的介绍表单的使用错误和解决办法.Forms & JavaScript Living Together in Harmony局限性 首先,你需要了解当用户

  • JavaScript Event学习第五章 高级事件注册模型

    W3C和微软都着力于发展自己的事件注册模型来取代Netscape的传统模型.虽然对于微软的模型我不是很感冒,但是w3c的还是不错的,除了这个鼠标定位 的问题.不过现在只有小部分浏览器支持. W3C W3C的DOM层面事件规范注意到了传统模式的问题.他对于你想在一个元素上绑定多个事件提供了一个很好的解决办法. W3C事件注册模型的关键就是addEventListener().你给他三个参数:事件类型,要执行的函数和一个布尔值(true或者false)我一会再解释.把我们熟知的doSomething

  • javascript学习笔记(五)正则表达式

    常用到的元字符有: •. 查找单个字符,除了换行和行结束符: •\w 匹配字母.汉字.数字.下划线等符号: •\s 匹配空白符(包含空格.制表符等): •\d 匹配数字: •\b 匹配位于单词的开头或结尾的匹配: 常用的量词有: •^n 匹配任何开头为 n 的字符串: •n$ 匹配任何结尾为 n 的字符串: •n+ 匹配任何包含至少一个 n 的字符串: •n* 匹配任何包含零个或多个 n 的字符串: •n? 匹配任何包含零个或一个 n 的字符串: •n{X} 匹配包含 X 个 n 的序列的字符串

随机推荐