IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

javascript定义对象的几种方法

叶德华的博客 2016-02-11 16:23:48 累计浏览 1,436 次
本机暂存

   本文总结javascript中定义对象的几种方式:

   1、基于已有对象扩充其对象和方法(只适用于临时的生成一个对象)

var obj = new Object();
obj.name = 'userObject';
obj.printName = function(name) {
    this.name = name; // 将属性name赋值为参数name
    alert(this.name);
}
obj.printName("newUserObject");

   2、工厂方式创建对象

   每次创建一个object以后,其中对应的方法也被创建一次,方法不能被创建的所有对象共享。

   (1)不带参数的构造方法

function createObject() {
    var obj = new Object();
    obj.name = 'userObject';
    obj.password = '123456';
    obj.get = function() {
        alert(this.name + ',' + this.password);
    };
    return obj; // 记得加上这句,返回一个对象
}
var obj1 = createObject();
var obj2 = createObject();
obj1.get();
obj2.get();

   (2)带参数的构造方法

function createObject(userName, password) {
    var obj = new Object();
    obj.userName = userName;
    obj.password = password;
    obj.get = function() {
        alert(this.userName + ',' + this.password);
    };
    return obj;
}
 
var obj1 = createObject('yedward', '123456');
obj1.get();

   (3)让函数被多个对象共享

function get() {
    alert(this.userName + ',' + this.password);
}
 
function createObject(userName, password) {
    var obj = new Object();
    obj.userName = userName;
    obj.password = password;
    obj.get = get; // 将外面定义的方法赋进来
    return obj;
}
 
var obj1 = createObject('yedward','123445');
var obj2 = createObject('yedyed','23424');
 
obj1.get();
obj2.get();

   3、构造函数方式

   (1)无参构造函数

function Person() {
    this.userName = 'yedward';
    this.password = '124234';
    this.get = function() {
        alert(this.userName + ',' + this.password);
    };
}
 
var person = new Person();
person.get();

   (2)有参数构造函数

function Person(userName, password) {
    this.userName = userName;
    this.password = password;
    this.get = function() {
        alert(this.userName + ',' + this.password);
    };
}
 
var person = new Person('yedward','111111');
person.get();

   4、使用原型(prototype)方式

   代码1:

function Person() {
    Person.prototype.userName = 'yedward';
    Person.prototype.password = '123456';
    Person.prototype.get = function() {
        alert(this.userName + ',' + this.password);
    };
}
 
var person1 = new Person();
var person2 = new Person();
 
//person1.userName = 'xiaoye';
Person.prototype.userName = 'xiaoye';
person1.get();
person2.get();

   代码2:

function Person() {
    Person.prototype.userName = new Array();
    Person.prototype.password = '123456';
    Person.prototype.get = function() {
        alert(this.userName + ',' + this.password);
    };
};
 
var person1 = new Person();
var person2 = new Person();
// 共享对象中的属性,一个对象属性的改变也会反应到其他的对象上。
person1.userName.push('zhangsan');
person1.userName.push('lisi');
// 但是运行结果可以发现,password的改变并没有反应到其他对象上!
person1.password = '67889';
person1.get();
 
person2.get();

   5、动态原型方式

   在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。

function Person() {
    this.userName = 'yedward';
    this.password = '1234535';
    if (typeof Person.flag == 'undefined') {
        // 往原型上添加get方法,并且只添加了一次!
        Person.prototype.get = function() {
            alert(this.userName + ',' + this.password);
        }
        Person.flag = true;
    }
};
 
var person1 = new Person();
var person2 = new Person();
person1.get();
person2.get();

   以上方法均可使用,具体使用哪个视情况而定!

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. JQuery实现Excel表格呈现 (累计阅读 48,351)
  2. 深入理解Javascript之执行上下文(Execution Context) (累计阅读 18,411)
  3. 从输入 URL 到页面加载完成的过程中都发生了什么事情? (累计阅读 15,937)
  4. 图片动态局部毛玻璃模糊效果的实现 (累计阅读 14,849)
  5. 天朝第二代身份证号码的验证机制 (累计阅读 14,764)
  6. HTML 5 的data-* 自定义属性 (累计阅读 14,353)
  7. 分享一个JQUERY颜色选择插件 (累计阅读 14,225)
  8. 什么是全栈工程师? (累计阅读 14,041)
  9. 快速排序(Quicksort)的Javascript实现 (累计阅读 11,736)
  10. 7 天打造前端性能监控系统 (累计阅读 11,192)