javascript定义对象的方式(javascript中没有类,只有对象)
1)基于已有对象扩充属性和方法(弊端:每次创建都与要重新定义属性方法)
 var object = new Object();
 alert(object.name);  //打印undefined
 //object["name"] = "zhaoyilin"
 object.name = "zhaoyilin"; //为object增添了name属性
 object.sayName = function(name){ //为object增添sayName函数
  this.name = name;
        alert(this.name);
 }
 //var object = {username: zhangsan , password :123};(这样定义最常见)
 alert(object.name);  //打印zhaoyilin
 delete object.name;  //删除
 alert(object.name) ; //打印undefined

2)工厂方式
 //工厂方式创建对象
1:function createObject(password){
   var object = new Object();
   object.username = "张三";
   pbject.password = password;
   object.getusername = function(){
      alert(this.username);   
   }
   return object;
 }
 var object1 = createObject();(弊端:每生成一个对象,都会生成新的getusername方法,浪费内存,我们多个对象需要多份
属性,但只需要共享一个函数对象)

2://改进版
 function getusername(){
  alert(this.username);
 }
 function createObject(password){
   var object = new Object();
   object.username = "张三";
   pbject.password = password;
   object.getusername = getusername; //返回引用
   return object;
 }
 var object1 = createObject();
弊端: 不是很清晰 getusername()方法分开了

3)构造函数方式
  function Person(//可以传参数){
     //在执行第一行代码前,js引擎会为我们生成一个对象
     this.username = "zhangsan"
     this.password = "123"
     this.getInfo = function(){
      alert(this.username+","+"this.password")
     } 
     //此处有一个隐藏的return语句,用于将之前生成的对象返回(必须要用new产生对象才会return) 
  } 
  var person = new Person();

4)原型("prototype")方式
 //使用prototype方式创建对象(prototype是Object对象里面的属性)
1: function Person(){
 }
 Person.prototype.username = "zhangsan";
 Person.prototype.getusername = function(){
  alert(this.username);
 }
 var person = new Person(); //这样生成的对象都拥有username属性和getusername函数
 弊端:单纯使用原型方式定义类无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。
2: function Person(){

}
 Person.prototype.username = new Array();
 Person.prototype.getusername = function(){
  alert(this.username);
 }
 var person = new Person();
 person.prototype.push("zhangsan");
 person.prototype.push("lisi")
 var person2 = new Person();
 person.getusername();
 person2.getusername();
 //这两个对象调用getusername()方法都是输出"zhangsan" "lisi" 这就引出了另一个弊端:
 如果使用原型方式对象,那么生成的对象会共项原型中的属性,这样一个对象改变了该属性也会反映到其他对象中.

person ----------->Person ----
                                             |----->username  //这和java的内存管理机制一样
person2----------->Person ----

3: 改进版 : 原型+构造函数定义对象(即不共享属性,但共享方法,是个很好的解决方案)
 function Person(){
   this.username = new Array();
 }
 Person.prototype.getInfo = function(){
   alert(this.username);
 }
 var p = new Person();
 var p2 = new Pesron();
 p.username.push("zhangsan");
 p2.usename.push("lisi");
 调用getInfo() p对象输出zhangsan p2输出lisi 两个数组对象不会相互影响。

5)动态原型方式:在构造函数中定义一个标志量

function Person(){
   this.username = "zhangsan";
   if(typeof Person.flag == "undefined"){
      alert("invoked!");
      Person.prototype.getInfo = function(){   //执行一次就会产生共享方法
       alert(this.username);
      }
      Person.flag = true;
   }
 }
 var person = new Person();
 var person2 = new Person();
 person.getInfo();  //"invoked!" "zhangsan"
 person2.getInfo(); //"zhangsan"

javascript定义对象的方式的更多相关文章

  1. javaScript定义对象的方法

    转自souhu新闻http://news.sohu.com/20110215/n279335637.shtml? javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放 ...

  2. javascript定义对象写法

    javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...

  3. JavaScript 的对象继承方式,有几种写法?

    JavaScript 的对象继承方式,有几种写法? 一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数,所以可使 Pa ...

  4. 架构师JavaScript 的对象继承方式,有几种程序写法?

    架构师JavaScript 的对象继承方式,有几种程序写法?   一.对象冒充 其原理如下:构造函数使用 this 关键字给所有属性和方法赋值(即采用类声明的构造函数方式).因为构造函数只是一个函数, ...

  5. JavaScript定义类的方式与其它OO语言有些差异

    JavaScript面向对象的程序编写与其它OO语言有一些出入,所以使用JavaScript的面向对象特性的时候,需要注意一些规范性的问题.下面就简单地谈一下,JavaScript如何定义一个类,在定 ...

  6. javascript定义函数不同方式的区别

    学习javascript中遇到了这么一个问题,代码如下: var test = 'a'; function test() { alert('Hello World!'); } alert(test); ...

  7. js中定义对象的方式有哪些?

    1.对象直接量 2.构造函数 3.原型方法 4.动态原型方法

  8. 【JS】#001 JS定义对象写法(原型、JSON方式)

    下面主要写两种 JS 定义对象的 常用写法 写法1:[很像面向对象语言中的写法] function zhongxia(age) { this.age = age; } zhongxia.name = ...

  9. 关于javascript自定义对象(来自网络)(最近几天不会的)

    javascript定义对象的几种简单方法 1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义 优点:动态的传递参数 缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存 funct ...

随机推荐

  1. 「LibreOJ NOIP Round #1」七曜圣贤

    题目啰嗦:支持三个操作: 不可重复集合:1.加入一个数 2.删除一个数 3.恢复目前最早的一次删除的数 操作可能不合法,每次有效操作之后求集合的mex(最小没有出现过的数) 50组数据+1e6,必须O ...

  2. BZOJ1912 APIO2010 洛谷P3629 巡逻

    Description: 在一个地区中有 n 个村庄,编号为 1, 2, ..., n.有 n – 1 条道路连接着这些村 庄,每条道路刚好连接两个村庄,从任何一个村庄,都可以通过这些道路到达其 他任 ...

  3. Javascript基本代码

    简单的了解了javascript 的基本代码,感觉和c#中的语句差不多. <!DOCTYPE html> <html xmlns="http://www.w3.org/19 ...

  4. C++ 什么是多态

    一.什么是多态(Polymorphism) 多态(Polymorphism)是面向对象(Object-Oriented,OO)思想"三大特征"之一,其余两个分别是封装(Encaps ...

  5. try catch finally 和return

    结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...

  6. android之解析json数据格式详解

    1.JSON解析     (1).解析Object之一: view sourceprint? 1 {"url":"http://www.cnblogs.com/qianx ...

  7. 在linux下创建软链接(即目录映射)

    在linux中创建软链接,使用命令:ln -s. 语法:ln -s 源文件 目标文件.

  8. 解决win10 CPU占用高的问题

    [PConline 技巧]很多笔记本用户在升级到Win10后,都遇到了这样一个问题,那就是Win10的CPU占用明显高于Win7.这个问题对于台式机可能还算不了什么,顶多就是偶尔卡一下罢了.可由于笔记 ...

  9. java springmvc4 图片或文件上传

    1.文件配置 配置文件解析 上传文件处理的核心方法 // uploadOneFile.jsp, uploadMultiFile.jsp submit to. @RequestMapping(value ...

  10. mysql 设置字符集

    可以用:show create table table_name查看建表信息 也可用: show create database database_name查看建库信息 mysql> creat ...