关于构造函数,为什么要用new 调用!!!!

function creat(a){this.name=a}  这个是个简单的函数,所谓 构造函数 本质上和其他函数没有任何区别。他的特征在于他的用途——批量生成某类对象!

但是作为函数,用new调用生成,和直接调用生成有本质的区别!

1.直接调用creat("tom")其中的this,指调用者,这个写法实际是 window.creat("tom"),因此其中的this指代window对象.var txt=creat()调用之后,return回来的是undefined,这种情况下 ,alert(window.txt)值为undefined,而alert(window.name)值为"tom"

2,用new调用,new creat("tom"),虽然同样调用全局window.creat("tom"),但是实际这里用的是工厂模式,

等同于

function creat(a){

var o=new Object();

o.name=a;

return o;

}

window.creat("tom")

因此在第二种情况,var txt=new creat()调用之后,alert(window.neme)打印出来是undefined,只能通过window.txt.name 来获取赋进去的值"tom"!

时间: 2024-10-12 14:59:13

关于构造函数,为什么要用new 调用!!!!的相关文章

C++中拷贝构造函数和赋值函数被调用的时机

一.拷贝构造函数被调用的时机: 1. 当用类的一个对象去初始化该类的另一个对象(或引用)时系统自动调用拷贝构造函数实现拷贝赋值. 2. 若函数的形参为类对象,调用函数时,实参赋值给形参,系统自动调用拷贝构造函数. 3. 当函数的返回值是类对象时,系统自动调用拷贝构造函数. 二.赋值函数被调用的时机: 当用一个对象赋值给另一个对象时 注意一.二中初始化和赋值的区别 C++中拷贝构造函数和赋值函数被调用的时机,布布扣,bubuko.com

构造函数、拷贝构造函数和析构函数的的调用时刻及调用顺序

构造函数.拷贝构造函数和析构函数的的调用时刻及调用顺序 对象是由“底层向上”开始构造的,当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止.因为,构造函数一开始构造时,总是要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时,如果无专门说明0,就调用直接基类的默认构造函数.在对象析构时,其顺序正好相反.   下面简单介绍下这三个函数. 构造函数       1.构造函数不能有返回值  

为什么抽象类中的构造函数可以被继承并被调用?

namespace ConsoleApplication12 { public abstract class A { static A() { Console.WriteLine("static A"); } public A() { Console.WriteLine("normal A"); } } public class B : A { static B() { Console.WriteLine("static B"); } publi

java构造函数是否可继承,以及子类构造函数可否不使用super调用超类构造函数

问题一:java的构造函数能否被继承? 笔者初学java看的一本书说:“java的子类自然的继承其超类的“非private成员”. 通常java的构造函数被设置为public的(若你不写构造函数,java自动添加的无参空构造函数就是public的),因本文中的类都在同一个包中,因此使用无修饰的友好权限说明问题,对于private构造函数的意义,可参见这里. 那么根据该书所述规则,非private的构造函数当然也应该被子类继承. 但实际上,子类不仅无法继承private成员,也无法继承构造函数.

[C++]复制构造函数的定义格式和调用时机

1.复制构造函数定义形式 <类名>::<复制构造函数名>(const <类名>&<对象名>) Test(const Test&t) 2.调用时机 (1)用类的已知对象定义该类的一个正在被创建的对象 Test u; Test t = u;//调用复制构造 (2)对象作为实参传递给函数形参 Test u; Test t(u); (3)对象作为函数返回值 Test u; Test fun() { Test t; return t;//调用复制构造

绝不要在构造函数和析构过程中调用virtual函数

下面是一个用来塑模股市交易的类: derived的类的构造函数被调用,但是首先得调用基类Transaction的构造函数,但是在后面还得调用virrual函数,这个时候子类的对象的构造还没有完成,那么虚函数也就没有意思,也就可以说虚函数现在还不是虚函数,在derived class对象构造期间,对象的类型还是base类的而不是derived class.不光是virtual函数会被解析为base calss,运行期间类型信息也会把对象视为base class.所以说现在根本就还没有derived

C++中构造函数居然是可以直接调用的

由于之前对C++的粗浅认知,并没有发现C++中直接调用构造函数的用法,偶然间看到别人的代码中有这一种写法,所以才深入了解了. 现在我们直接从代码中分析这一用法. 代码如下: #include <iostream> class A{ public: A():a(0),b(0){std::cout<<"调用第一个构造函数"<<std::endl;} A(int x):a(x),b(x+1){std::cout<<"调用第二个构造函数

JS高级 —— 普通函数、构造函数、对象方法的调用

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 6 <title>函数的调用方式</title> 7 </head> 8 <script>

多重继承,虚继承,MI继承中虚继承中构造函数的调用情况

先来测试一些普通的多重继承.其实这个是显而易见的. 测试代码: [cpp] view plain copy print? //测试多重继承中派生类的构造函数的调用顺序何时调用 //Fedora20 gcc version=4.8.2 #include <iostream> using namespace std; class base { public: base() { cout<<"base created!"<<endl; } ~base()

构造函数的继承--子类不继承父类的构造函数,只能调用

关于子类对父类构造函数的继承: 子类必须调用父类的构造函数.默认情况下会自动调用父类的无参构造函数.如果父类没有无参构造函数,则必须显式的用super()调用一个构造函数. 创建对象时,先调用父类的构造函数对对象进行初始化, 然后再调用子类自己的构造函数 子类只继承(其实是默认调用)父类的默认(无参)构造函数,如果父类重写了自己的构造函数,就会导致父类没有无参构造函数,这样子类就不能从父类继承构造函数.