技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> JavaScript --> javascript定义对象的几种方法

javascript定义对象的几种方法

浏览:980次  出处信息

   本文总结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. 面向对象的Shell脚本    (阅读:5155)
  2. 用星际争霸讲解面向对象的概念    (阅读:4152)
  3. 使用PHP创建一个面向对象的博客    (阅读:4069)
  4. PHP面向对象编程的三大特性    (阅读:3350)
  5. 面向对象设计模式的核心法则    (阅读:3172)
  6. PHP内核介绍及扩展开发指南―类和对象    (阅读:2980)
  7. 对象的消息模型    (阅读:2505)
  8. jQuery之jQuery方法总是返回jQuery对象    (阅读:2366)
  9. 我所偏爱的 C 语言面向对象编程范式    (阅读:2073)
  10. 细说JavaScript中对象的属性和方法    (阅读:2051)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1