web.js.创建对象
来源:互联网 发布:mac u盘 没有退出选项 编辑:程序博客网 时间:2024/06/07 02:12
对象的组成
方法——函数:动态,过程:
属性——变量:状态,静态:
变量:自由,不属于任何东西:
属性:属于一个对象
函数,变量属于某个对象时就成为方法,属性(其实本质还是一样,环境不同名字不同而已)看下面一段代码
var arr=[1,2,3];//变量 arr.a=12;//属性 show=function (){//函数 alert(this); } arr.yinshuo=function (){//方法 alert(this); } show();//window arr.yinshuo();//1,2,3
看下面一段代码,创建了一个自己的对象
<script type="text/javascript"> function creatpeo(name,qq){//构造函数, var obj=new Object();//创建对象 obj.name=name; obj.qq=qq;//name qq 为属性 obj.myname=function(){ alert('我的名字:'+this.name) } obj.myqq=function(){ alert('我的QQ:'+this.qq); } //以上两个为方法 return obj; } var obj1=creatpeo('尹烁','12315');//调用 var obj2=creatpeo('尹航','110'); obj1.myname();//尹烁 obj1.myqq(); //12315 alert(obj1.myname)//他们俩弹出都是obj.myname=function(){ alert(obj2.myname)//alert('我的名字:'+this.name) //} alert(obj1.myname==obj2.myname)//但答案却是false,想想这样会引发什么样的坏处 </script>
咱们 一步步解决上面的问题 ,首先通常咱们调用一个类前 要加new,
比如 var arr=new Array(),在这里 new有什么用呢,先看修改后的代码
function creatpeo(name,qq){//构造函数, //加了new后 系统偷偷为你做了类似 var this=new Object() this.name=name; this.qq=qq; this.myname=function(){ alert('我的名字:'+this.name) } this.myqq=function(){ alert('我的QQ:'+this.qq); } //系统偷偷为你 return this ; } var en= new creatpeo('尹烁','12315'); en.myname(); en.myqq(); </script>
代码得到简化,咱看下一个问题,alert(obj1.myname==obj2.myname)
答案为false
在上面我已经做了实验,obj1.myname与obj2.myname弹出的东西完全相等,但却系统却认为不一样,这就造成了空间大量浪费(因为每调用一次,就要多拿出一部分空间来储存它),怎么解决呢,看下面
function creatpoeple(name,qq){ this.name=name; this.qq=qq; } creatpoeple.prototype.Sname=function(){ alert('我的名字:'+this.name); } creatpoeple.prototype.Sqq=function(){ alert('我的名字:'+this.qq); } var obj1= new creatpoeple('尹烁','12315') var obj2= new creatpoeple('尹航','110') obj1.Sname(); obj1.Sqq(); alert(obj1.Sname==obj2.Sname);//ture
这里我们用到了prototype(原型),什么是原型呢,看一段简单的代码
var arr1=new Array(12,55,34);var arr2=new Array(12,33, 1);arr1.sum=function () { var result=0; for(var i=0;i<this.length;i++) { result+=this[i]; } return result;};alert(arr1.sum());alert(arr2.sum());
思考下,alert(arr2.sum());能弹出来吗,有什么方法才能弹出来呢,
就是再加一个arr2的方法即
arr2.sum=function () { var result=0; for(var i=0;i<this.length;i++) { result+=this[i]; } return result;};
是不是感觉特别麻烦,在看看prototype(原型)如何解决这个问题
var arr1=new Array(12,55,34);var arr2=new Array(12,33, 1);Array.prototype.sum=function () { var result=0; for(var i=0;i<this.length;i++) { result+=this[i]; } return result;};alert(arr1.sum());alert(arr2.sum());
依我来看,原型就是把本质相同一些东西集合到一起,Array.prototype是一个集合[arr1,arr2],当你调用arr1.sum(),Array.prototype.sum=function (),也就可以理解为arr1.sum=function (),接着上面的代码
function creatpoeple(name,qq){//构造函数 this.name=name; this.qq=qq; } creatpoeple.prototype.Sname=function(){//方法 alert('我的名字:'+this.name); } creatpoeple.prototype.Sqq=function(){//方法 alert('我的名字:'+this.qq); } var obj1= new creatpoeple('尹烁','12315') var obj2= new creatpoeple('尹航','110') obj1.Sname(); obj1.Sqq(); alert(obj1.Sname==obj2.Sname);//ture
依据上面所说,你是不是可以对这段代码进行分析呢,同样很惊喜的看到,我们最后得到的是true
1.咱们先对前面没说的进行解释
构造函数 : 加属性 不同的(name,qq不同的特征)
原型 : 加方法 相同的(让不同的对象(arr1,arr2)使用相同的方法)
继续努力
- web.js.创建对象
- web前端-js通过object创建对象
- [js]创建js对象
- web.js.创建元素
- js创建数组,创建对象
- JS 创建对象
- JS 创建Ajax 对象
- JS创建对象
- JS 创建对象
- js 对象创建
- js创建对象
- js对象创建过程
- js:创建对象
- js创建对象
- js创建对象
- 创建js对象
- js对象创建方式
- js创建对象
- Android-进程与线程
- sklearn中的交叉验证(Cross-Validation)
- CacheCloud管理平台
- Codeforces Round #413 B. T-shirt buying
- <<Linux内核设计与实现>>读书笔记(十二)-内存管理
- web.js.创建对象
- Spring的两种事务定义方式
- 数据持久化--userDefaults
- mysql中varchar(50)最多能存多少个汉字
- opencv与tesseract
- spark-streaming kafka api(KafkaUtils.createDirectStream)使用
- javascript简单计算器
- centos7安装mysql
- Unity3D说明文档翻译-Physics Manager