函数创建对象(5)寄生构造函数和稳妥构造函数模式

1.寄生构造函数模式

function Person(name,age,job){
      var o=new Object();
      o.mane=mane;
      o .age=age;
      o.job=job;
      o.sayName=function(){
        alert(this.name);
      };
    return o;
}
var friend=new Person("Nicoholas",29,"Engineer");
friend,sayName();//"Nicholas";

某些特殊情况下使用,例如:

function SpecialArray(){
      var values=new Array();//创建数组
      var .push.apply(values,arguments);//添加值
      values.toPipedString=function(){  //添加方法
           return this.join("|");
   };
      return values;//返回数组
}
var colors=new SpecialArray("red","blue","green");
alert(color.toPipedString());//"red|blue|green"

注意:返回的对象跟构造函数或者构造函数的原型属性没有关系;不能使用instanceof操作符来确定对象类型。

2.稳妥构造函数模式

稳妥对象没有公共属性,不能使用this,防止数据被其他应用程序改动时使用

function Person(name,age,job){
   var o=new Object;//创建要返回的对象
   // 可以在这里定义私有变量和函数
   o.sayName=function(){//添加方法
     alert(name);
  };
     return o;//返回对象
}
var friend=Person("Nicholas",29,"Engineer");
friend.sayName();//"Nicholas"

注意:这种模式创建的对象与构造函数之间也没有什么关系,instanceof操作符对这种对象也没有意义

时间: 2024-11-06 07:30:35

函数创建对象(5)寄生构造函数和稳妥构造函数模式的相关文章

函数创建对象(3)组合使用构造函数模式和原型模式

构造函数模式用于定义实例属性:原型模式用于定义方法和共享的属性.好处:每个实例都有自己的实例属性副本,同时有共享方法的引用,节省了内存:支持向构造函数传递参数. function Person(name,age,job){ this.name=name; this.age=age; this.job=job; this.friends=["shelby","Court"]; } Person.prototype={ contructor:Person, sayNam

js创建对象的几种方式(工厂模式、构造函数模式、原型模式)

普通方法创建对象 var obj = { name:"猪八戒", sayname:function () { alert(this.name); } } var obj1 = { name:"沙和尚", sayname:function () { alert(this.name); } } var obj2 = { name:"孙悟空", sayname:function () { alert(this.name); } } obj.saynam

c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A(void);//缺省的无参数构造函数 A(const A&a);//缺省的拷贝构造函数 -A();//缺省的析构函数 A&operator=(const A &a);//缺省的赋值构造函数 1).“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘

【编程题】编写String类的构造函数、拷贝构造函数、析构函数和赋值函数

[编程题]编写String类的构造函数.拷贝构造函数.析构函数和赋值函数 [题目]:请编写如下4个函数 1 class String 2 { 3 public: 4 String(const char *str = NULL);// 普通构造函数 5 String(const String &other); // 拷贝构造函数 6 ~ String(void); // 析构函数 7 String & operate =(const String &other);// 赋值函数 8

C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)

在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符.我就斗胆将他们命名为六大函数好了. 一.构造函数 c++primer中说过:构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数.构造函数的工作就是保证每个对象的数据成员具有合适的初始值. 构造函数与其他函数不同:构造函数和类同名,没有返回类型. 构造函数与其他函数相同:构造函数也有形参表(可为void)和函数体.  (参数表为void的构造函数为默认构造函数

CPP_类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数

类默认函数:构造函数,拷贝构造函数,赋值函数和析构函数 class Person{ public : Person():age(10), name(NULL); Person(int myage, char *myname); Person(const Person &a); ~Person(void); void set_age(int myage); void get_age(void); void set_other_age(Person &a, int b); private: i

请为CMyString类型编写构造函数、copy构造函数、析构函数和赋值运算符函数。

如下为类型CMyString的声明,请为该类型编写构造函数.copy构造函数.析构函数和赋值运算符函数. 1 class CMyString 2 { 3 public: 4 CMyString(const char* pData = nullptr); 5 CMyString(const CMyString& str); 6 ~CMyString(void); 7 8 CMyString& operator = (const CMyString& str); 9 10 void P

C++空类编译器自动生成的6个成员函数、关于构造函数、拷贝构造函数的解释

对于空类,编译器不会生成任何的成员函数,只会生成1个字节的占位符. 有时可能会以为编译器会为空类生成默认构造函数等,事实上是不会的,编译器只会在需要的时候生成6个成员函数:默认构造函数.默认拷贝构造函数.默认析构函数.默认赋值运算符 这四个是我们通常大都知道的.但是除了这四个,还有两个,那就是取址运算符和 取址运算符 const. class Empty { public: Empty(); //缺省构造函数 Empty(const Empty &rhs); //拷贝构造函数 ~Empty();

Swift构造函数和便利构造函数

构造函数基础 构造函数是一种特殊的函数,主要用来在创建对象时初始化对象,为对象成员变量设置初始值,在 OC 中的构造函数是 initWithXXX,在 Swift 中由于支持函数重载,所有的构造函数都是 init 构造函数的作用 分配空间 alloc 设置初始值 init 必选属性 自定义 Person 对象 class Person: NSObject { /// 姓名 var name: String /// 年龄 var age: Int } 提示错误 Class 'Person' has