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封装的代码实现 说明:因为时间紧张,本人写博客过程中只 ...
随机推荐
- hadoop 2.7.3伪分布式环境运行官方wordcount
hadoop 2.7.3伪分布式模式运行wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次以伪分布式模式来运行w ...
- yield 异步 并行 Promise await async
yield方式转移执行权的协程之间不是调用者与被调用者的关系,而是彼此对称.平等的 http://www.geeksforgeeks.org/use-yield-keyword-instead-ret ...
- vlookup实战_英语单词更新
https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149( 欢迎关注博主 ...
- lua 求table长度和判断空
local table_a = {} 判断一:(错误方法) if table_a == {} then --你会发现你怎么也进不来 条件判断始终返回false,为什么会这样呢? ...
- DBUtil内部实现过程解读
python数据库连接工具DBUtils DBUtils是一个允许在多线程python应用和数据库之间安全及高效连接的python模块套件. 模块 DBUtils套件包含两个模块子集,一个适用于兼容D ...
- osgViewer::Viewer::Windows
osg自带窗口去掉边框 #ifdef _WIN32 #include <Windows.h> #endif // _WIN32 #include<iostream> #incl ...
- css简单学习属性3---css属性选择器
1:通配符 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- AFN使用etag进行网络缓存
前提:后台返回的接口带etag 第一步 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( ...
- mysql使用truncate截断带有外键的表时报错--解决方案
报错内容如:1701 - Cannot truncate a table referenced in a foreign key constraint 一.为什么要使用truncate 使用trunc ...
- QuickText for Notepad++
昨刚投入新欢Notepad++,思路如泉涌,码代码也不累了,一口气用她码了两篇文- 今再接再厉,继续.QuickText严格说来算不上什么神器级插件,也仅只是一个缩写快捷输入的插件而已.可用得好,那效 ...