JS面向对象基础
以往写代码仅仅是为了实现特定的功能,后期维护或别人重用的时候,困难很大。
Javascript作为完全面向对象的语言,要写出最优的代码,需要理解对象是如何工作的。
1.
对象是javascript的基础,对象是一系列属性的集合,类似其他语言的散列表。
如下两个创建对象,并实现属性的例子是相同的。
var obj = new Object();
//给对象Obj设置一系列的属性
obj.name = "rxm";
obj.getAge = function()
{ return (new Date()).getFullYear() - 1986; };
//---------------------------------------
//结合键值对来重写对象
var obj = {
name: "rxm",
getAge: function() { return (new Date()).getFullYear() - 1986; }
};
2.
Javascript中,对象本身可以用来创建新对象,对象也可以继承自其他对象,这称为“原型化继承”。
<script
language="javascript"
type="text/javascript">
function User(name) {
this.name = name;
}
var my =
new User("rxm");
var you =
new my.constructor("cwr");
alert(my.name == "rxm");
//true
alert(typeof my ==
typeof you); //true
User("bj");
//对象上下文未设定,默认为window.
alert(window.name); //bj
</script>
1)公共方法
要实现在每个实例中都用到的公共方法,需了解prototype(原型)属性,这个属性包含了一个对象,此对象可以作为所有新副本的基引用。
function User(name, age) {
this.name = name;
this.age = age;
}
User.prototype.getName = function() {
return
this.name;
}
User.prototype.getAge = function() {
return
this.age;
}
var my =
new User("rxm", 27);
alert(my.getAge()); //每个实例化的对象都可以访问prototype属性添加的属性
alert(my.getName());
2)私有方法
只能有构造函数访问的私有函数的例子:
function User(name, age) {
this.name = name;
this.age = age;
function getName() {
return
this.name;
}
}
var my =
new User("rxm", 27);
my.getName(); //调用失败[运行时错误: 对象不支持此属性或方法]
3)特权方法
指那些在处理对象私有变量的同时,允许用公共方式访问的方法。
function User(age) {
var year = (new Date()).getFullYear() - age;
this.getAge =
function() {
return year;
}
}
var my =
new User(27);
alert(my.getAge());//1986
alert(my.year);//我们无法访问对象的私有属性
动态生成代码的能力是不能小视的,能够根据运行时生成代码是十分的有用。
//创建一个新的用户对象,接收一个有许多属性的对象作为参数
function User(properties) {
//遍历每一个属性,设置读取器和设置器
for (var i
in properties) {
(function(which) {
var p = i;
which["set" + p] =
function(val) {
properties[p] = val;
}
which["get" + p] =
function() {
return properties[p];
}
}
)(this);
}
}
var user =
new User({
name:"rxm",
age:27 });
alert(user.name); //没有这么个属性
alert(user.getname()); //rxm
函数是动态生成的
alert(user.getage());//27
)静态方法,类似C# static
function Person(name) {
this.name = name;
this.getname =
function()
{ return
"my name is " + this.name; };
}
Person.mouth = 1;
var my =
new Person("rxm");
alert(my.getname());//实例的
alert(Person.mouth);//静态的
JS面向对象基础的更多相关文章
- JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) { return i1 + i2;//如果不写return返回 ...
- [Js]面向对象基础
一.什么是对象 对象是一个整体,对对外提供一些操作 二.什么是面向对象 使用对象时,只关注对象提供的功能,不关注其内部细节,比如Jquery 三.Js中面向对象的特点 1.抽象:抓住核心问题 2.封装 ...
- 第十四节 JS面向对象基础
什么是面向对象:在不需要知道它内部结构和原理的情况下,能够有效的使用它,比如,电视.洗衣机等也可以被定义为对象 什么是对象:在Java中对象就是“类的实体化”,在JavaScript中基本相同:对象是 ...
- JS面向对象基础讲解(工厂模式、构造函数模式、原型模式、混合模式、动态原型模式)
什么是面向对象?面向对象是一种思想. 面向对象可以把程序中的关键模块都视为对象, 而模块拥有属性及方法. 这样如果我们把一些属性及方法封装起来,日后使用将非常方便,也可以避免繁琐重复的工作. 工厂 ...
- js面向对象基础总结
js中如何定义一个类? 定义的function就是一个构造方法也就是说是定义了一个类:用这个方法可以new新对象出来. function Person(name, age){ this.name = ...
- JS面向对象基础2
根据之前看了面向对象相关的视频,按照自己的理解,整理出相关的笔记,以便自己的深入理解. javascript面向对象: 突发奇想,注意:===全等:是指既比较值,也比较类型(题外话,可忽略) 逻辑运算 ...
- JS面向对象基础1
根据之前看了面向对象相关的视频,按照自己的理解,整理出相关的笔记,以便自己的深入理解. 如果要判断两个数是否相等,将值乘以10或者100,转换成整数再进行比较 例如:a++与++a 短路运算符 ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║Vue基础:JS面向对象&字面量& this字
缘起 书接上文<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史>,昨天咱们说到了以我的经历说明的web开发经历的 ...
- js面向对象开发基础
js的面向对象开发能力较弱,基本是以prototype为核心的面向对象,虽然现在出了个class这玩意,但本文还是先不做探讨. 面向对象基础——构造函数方法 var Fly = function (s ...
随机推荐
- Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会有解决很多问题]生产者消费者模型
http://blog.csdn.net/a352193394/article/details/39503857 Java多线程之~~~使用Exchanger在线程之间交换数据[这个结合多线程并行会 ...
- android 瀑布流效果(仿蘑菇街)
我们还是来看一款示例:(蘑菇街) 看起来很像我们的gridview吧,不过又不像,因为item大小不固定的,看起来是不是别有一番风味,确实如此.就如我们的方角图形,斯通见惯后也就出 ...
- mybatis 做 insert操作的时候返回插入的那条数据的id
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:吃丸子的小鹿链接:http://www.zhihu.com/question/20810321/answer/16843223 ...
- linux文件权限赋值
1修改权限 命令:chmod (change mode) 功能:改变文件的读写和执行权限.有符号法和八进制数字法. 选项:(1)符号法: 命令格式:chmod {u|g|o ...
- MySQL数据备份和恢复
1.数据备份 mysqldump -uroot -p databasename > file.sql 2.数据还原 mysql -u root -p databasename < file ...
- centos 6.2安装bind 9.8.2 master、slave与自动修改后更新
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://dl528888.blog.51cto.com/2382721/1249311 随 ...
- MyEclipse10.6、Maven、svn集成
这几天整理maven,根据开发部署需要,需要把原先的myeclipse下的普通javaWeb工程用maven管理,弄了2天,主要还是在jar包的引入上,总是少- -! 好了,下面记录一下我的安装过程: ...
- Android:SQLite无法update/insert/delete数据(数据库被locked)
//在频繁范围数据库进行读写操作后,会发生增删改数据都无效的问题,查询一般正常. mDatabase.beginTransaction(); try { Log.v(TAG,"locked: ...
- android把图片 视频 保存到相册
//android把图片文件添加到相册 ContentResolver localContentResolver = getContentResolver(); ContentValues local ...
- linux文件系统命令
1. df df -h 2.查看文件系统的类型 df -T tmpfs文件系统所知道的就是它正在使用某种形式的虚拟内存.tmpfs是一种基于内存的文件系统.而tmpfs是一个文件系统,并不是块设备,只 ...