JS OOP -01 面向对象的基础
JS面向对象的基础:
1.用定义函数的方式定义类
2.用new操作符获得一个类的实例
3.使用 [ ] 引用对象的属性和方法
4.动态添加,修改,删除对象的属性和方法
5.使用 { } 语法创建无类型的对象
6.prototype原型对象
1.函数的方式定义类
function class1 () {.......}
**class1既是一个函数也是一个类,可以将它理解为类的构造函数,负责初始化工作。
2.new 操作符获得一个类的实例
**JS中,函数和类是一个概念,当对一个函数进行new操作时,就会返回一个对象。如果这个函数中没有初始化类成员,那就会返回一个空的对象
function Hello(){
alert('hello');
}; var obj = new Hello();//这里执行了alert('hello'); 把Hello当作是一个构造函数。
alert(typeof(obj));//打印出obj变量是一个object。
3.使用 [] 引用对象的属性和方法
**在JS中,每个对象可以看作是多个属性(方法)的集合,引用一个属性(方法),如下:
对象名.属性(方法)名
对象名["属性(方法)名"]
var arr = new Array(); arr.push('111');
arr['push']('333'); var len =arr.length;
var len =arr['length'];
alert(len);
**这种引用属性(方法)的方式和数组类似,体现了JS对象就是一组属性(方法)的集合这个性质。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="js/0318.js" ></script>
<script> function User(){
this.age=21;
this.sex='male';
} var user = new User();
function show(slt){
if(slt.selectedIndex!=0){
alert(user[slt.value]);
}
} </script> </head>
<body> <select onchange="show(this)">
<option value="0">请选择信息</option>
<option value="age">年龄</option>
<option value="sex">性别</option>
</select> </body>
</html>
**eval函数!!
**eval() 函数计算 JavaScript 字符串,并把它作为脚本代码来执行。
**如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。
<script>
eval("x=10;y=20;document.write(x*y)");
document.write("<br>" + eval("2+2"));
document.write("<br>" + eval(x+17));
</script>
输出:200 4 27
4.动态添加,修改,删除对象的属性和方法
**JS提供了灵活的机制来修改对象的行为,可以动态添加,修改,删除属性和方法。
var user =new Object();
user.id=1;//动态生成id属性
user.name='zhang';//动态生成name属性 alert(user.name);//访问东西生成的name属性 user.show=function(){//动态添加方法
alert('ok');
}
user.show();//
**动态生成的方法,可以如下:
function Myshow(arg01){//声明一个函数
alert('ok'+arg01);
} var user =new Object();
user.id=1;//动态生成id属性
user.name='zhang';//动态生成name属性 user.show =Myshow;//将Myshow方法的指针指向user.show
user.show(' qq');
**注意:undefined和null的区别
**调试:console.log(obj);
**修改就是重新赋值,谁在后把之前的覆盖!
**JS里面不存在重载!
**动态删除:
function Myshow(arg01){//声明一个函数
alert('ok'+arg01);
} var user =new Object();
user.id=1;//动态生成id属性
user.name='zhang';//动态生成name属性 user.show =Myshow;//将Myshow方法的指针指向user.show
user.show(' qq'); //动态删除
user.id=undefined;
user.name=undefined;
delete user.show; alert(user.id);//undefined
user.show('zq');//没有打印出来,没有该方法了
**标准标签,可以动态添加额外的属性,不过要注意到浏览器的兼容性!!
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title> <script> function TestTT(){ var obj = document.getElementById('btn');//获取btn对象
obj.tab='ZQ';//给该对象添加一个tab的属性,但是input标准标签并没有这个属性的!动态添加后是可以访问的 alert(obj.tab);
alert(obj.value);
} </script> </head>
<body> <input id="btn" type="text" value="123" />
<button onclick="TestTT()" >TT</button> </body>
</html>
5.使用 { } 大括号语法创建无类型对象 --(更原生的语法,用处较多)
**JS中的对象其实就是属性(方法)的一个集合,并没严格意义上的类的概念。所以可以使用 { } 直接声明一个对象,而不是类。
var arr= new Array();
var arr=[]; var obj = new Object();
var obj ={}; //大括号创建的是对象不是类
var user ={
name:'zq',
age:12
}; //alert(user.age);
//var user1= new User();//js会报错
//alert(user1.age); function User(){ };
var user_1 = new User(); user_1=
{
name:'zq',
age:12
};
alert(user_1.name);
6.prototype原型对象
**prototype对象是实现面向对象的一个重要机制。每个函数(function)其实也是一个对象,它们对应的类是‘Function’,但它们的身份特殊,每个函数对象都具有一个子对象prototype。
**即prototype表示了该函数的原型,而函数也是类,prototype就是表示了一个类的成员的集合。当通过 new 来获取一个类的对象时,prototype对象的成员都会成为实例化对象的成员。
**这里可以理解为C#的静态成员,并且可以动态声明!
function User(){
this.name='zq';
this.age=12;
}; User.prototype.show=function(){//给这个类的原型添加了一个show方法
alert('User Show!!!');
}; var user1=new User();
user1.name='qq';
//alert(user1.name);
user1.show(); var user2=new User();
//alert(user2.name);
user2.show();
JS OOP -01 面向对象的基础的更多相关文章
- JavaScript面向对象(一)——JS OOP基础与JS 中This指向详解
前 言 JRedu 学过程序语言的都知道,我们的程序语言进化是从"面向机器".到"面向过程".再到"面向对象"一步步的发展而来.类似于 ...
- # 095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 03 封装总结 01 封装知识点总结
095 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 04 static关键字(续)
094 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 03 static关键字(下)
093 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)
092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 01 static关键字(上)
091 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 04 使用包进行类管理(2)——导入包
090 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 使用包进行类管理(1)——创建包
089 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...
- 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现
088 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 02 封装的代码实现 本文知识点:Java封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...
随机推荐
- SQLite3中的日期时间函数使用小结
代码如下: import sqlite3conn = sqlite3.connect('/tmp/sqlite.db')cur = conn.cursor() 接下来干嘛呢?建一张表吧.这里需要注意的 ...
- 上传图片获取base64编码、本地预览
一.读取文件的对象 — new FileReader() 上传图片接口参数有图片base64编码(数组, imgBase64List ),主要用到 读取文件的对象 [ new FileReader ...
- vue官网笔记
学习了vue后又重新过了一遍官网的教程,选择性地摘抄了一些自己觉得比较重要的知识点.以备后面查缺补漏用. 计算属性 计算属性mounted中,属性值函数将用作属性的getter函数.当函数中的依赖发生 ...
- centos上安装Python并修复yum
date: 2019-07-01 18:09:53 author: headsen chen notice: 个人原创 1,安装python3.7: yum install zlib-devel b ...
- angular 中*ngIf 和*ngSwitch判断语句
<div style="text-align:center"> <h1> Welcome to {{ title }}! </h1> <p ...
- Delphi ADOQuery的速度优化
今天终于把纠缠了几天的问题改完了,说到底只是一个很小的问题,就是ADOQuery的一个小属性. 把控件DBGridEh的一列的checkbox设为true,将其绑定DataSource和ADOQuer ...
- Python中列表,元组,字典,集合的区别
参考文档https://blog.csdn.net/Yeoman92/article/details/56289287 理解Python中列表,元组,字典,集合的区别 列表,元组,字典,集合的区别是p ...
- DOS与cmd(windows)
dos是计算机的最初期的操作系统,对电脑操作必须输入各种dos命令窗口,可以理解成运行计算机机器内部语言,知道编程吗?其实早期dos命令操作系统就是运行计算机内部的编程命令,因此操作人员都必须具有一定 ...
- iOS-UIAlertView与UIActionSheet
UIAlertView与UIActionSheet 6.11.1 常规调用 UIAlertView:调出一个模态对话框,屏幕居中显示 UIActionSheet:非模态对话框,屏幕下方弹出 Alert ...
- sqlserver 数据库操作导出数据sql工具
软件名称sqldbx 下载URL https://download.csdn.net/download/yanghl1998/7832861 Navicat Premium 这个工具任何类型数据库 ...