构造函数中返回一个对象对结果有什么影响

var Func = function(){
      return {}
}
Func.prototype.show = function(){
     console.log("this is func show");
}
var Fun = function(){
}
Fun.prototype.show = function(){
    console.log("this is fun show");
}
var f1 = new Func();
var f2 = new Fun();

请问f1和f2有什么不同?

f1只是一个普通的对象,无法拿到Func原型上的任何东西

f2则是一个拥有完整继承关系的对象,可以拿到Fun原型上的所有东西

这是因为:

“显式的 return 表达式将会影响返回结果,但仅限于返回的是一个对象。”

参考网址:http://bonsaiden.github.io/JavaScript-Garden/zh/

谷歌真心不错,百度搜出来的都是些陈词滥调

时间: 2024-12-17 12:19:08

构造函数中返回一个对象对结果有什么影响的相关文章

Javascript中构造函数的返回值问题和new对象的过程

首先明确一点:javascript中构造函数是不需要有返回值的,这一点跟java很类似.可以认为构造函数和普通函数的最大差别就是:构造函数中没有return语句,普通函数可以有return语句:构造函数中会使用this关键字定义成员变量和成员方法,普通的函数不会使用this关键字定义成员变量和方法. function Person(name,sex) { this.name = name; this.sex = sex; // return 1; //return true; //return

构造函数中使用new时注意事项

使用new初始化对象中的指针成员时遇到的问题 在构造函数中使用new初始化指针成员,那么析构函数中就必须使delete,并且new对应delete, new[]则对应于delete[]. 在有多个构造函数的情况下,必须以相同的方式使用new,要不用new,要不用new[],因为只存在一个析构函数,所有的构造函数都必须与虚构函数相兼容. PS. 当然在构造函数中使用new初始化指针的时候,可以把指针初始化为空(0/NULL 或者是C++11中的nullptr),因为delete不管有没带[]都与空

C++对象模型之编译器如何处理函数返回一个对象

1.与经验不符的输出 我们知道,当发生以下三种情况之一时,对象对应的类的复制构造函数将会被调用: 1)对一个对象做显示的初始化操作时 2)当对象被当作参数传递给某个函数时 3)当函数返回一个类的对象时 所以,当我们设计一个函数(普通或成员函数)时,经验告诉我们,出于效率的考虑,应该尽可能返回一个对象的指针或引用,而不是直接返回一个对象.因为在直接返回一个对象可能会引起对象的复制构造过程,这意味着会发生一定量的内存复制和对象创建的动作,从而降低了程序的效率.这个设计的想法是正确的,但是实际上,当函

(转)C++中返回对象的情形及RVO

http://www.cnblogs.com/xkfz007/archive/2012/07/21/2602110.html 之前有文章介绍过临时对象和返回值优化RVO方面的问题.见此处. 在C++中,返回对象这一点经常被诟病,因为这个地方的效率比较低,需要进行很多的操作,生成一些临时对象,如果对象比较大的会就会比较耗时.但是在编译器实现的时候,经常是对返回对象的情况进行优化,也就是进行返回值优化 . 在g++中,这个是默认已经进行了优化.以前我希望看看到底C++怎么操作的,但是无法看到,就是因

More Effective C++----(10)在构造函数中防止资源泄漏

Item M10:在构造函数中防止资源泄漏 如果你正在开发一个具有多媒体功能的通讯录程序.这个通讯录除了能存储通常的文字信息如姓名.地址.电话号码外,还能存储照片和声音(可以给出他们名字的正确发音). 为了实现这个通信录,你可以这样设计: class Image { // 用于图像数据 public: Image(const string& imageDataFileName); ... }; class AudioClip { // 用于声音数据 public: AudioClip(const

【C++】为什么构造函数没有返回值?(转载)

为什么构造函数没有返回值? 意见(1) 我认为构造函数隐含的返回值就是this,因为构造函数是在类的对象产生时自动调用.构造函数被调用也就意味着产生了一个对象,而this指针是与对象实体相关联的,所以我认为它返回的就是this.举例如下: class A { public: A(); ~A(); public: void f(); }; A aa;此语句导致类A的构造函数A()被自动调用返回一个首地址,系统就在内存中分配一块区域用来存放对象aa.这个首地址就被赋给this. 意见(2) 返回的确

在必须返回一个对象时,不要去尝试返回一个引用

一旦程序员把注意力都转向了对象传值方式隐含的效率问题(参见第 20 条)时,许多人都变成了极端的“改革运动者”,他们对传值方法采取斩草除根的态度,在他们不屈不挠追求传递引用方式的纯粹性的同时,他们也犯下了致命的错误:有时候传递的引用所指向的对象并不存在.这决不是一件好事情. 请看下面的示例,其中的 Rational 类用来表示有理数,其中还包括一个函数来计算两个有理数的乘积: class Rational {public:  Rational(int numerator = 0, int den

奇妙的动态代理:EF中返回的对象为什么序列化失败

今天有如鹏的学生遇到一个问题:把一个对象保存到Session中(进程外Session)后,Web服务器重启,当从Session读取这个对象的时候报错,提示是一个“T_Users”后面跟着一大串数字的类型,不是“T_Users”类型. 凭着感觉,我问“这个对象是普通对象还是什么对象”,回复说“是Entity Framework返回的对象”,瞬间我知道了:是延迟加载造成的.下面写个程序验证一下. 数据库里建立两张表:一张T_Persons表,一张T_Dogs表,T_Dogs表中有一个MasterId

c++赋值构造函数为什么返回引用类型?

目录 0 前言 1 内置类型 2 自定义类型 3 结论 4 源码 0. 前言 c++默认赋值构造函数的返回值是引用类型,c++赋值运算符=的本意是返回左值的引用,我们重载赋值构造函数的时候,返回值是否应该设为引用类型呢? 按照<Effective C++>中第10条,最好是设为引用类型. 本文,通过实验来表述返回值是否为引用类型的区别. 1. 内置类型 int i= 1,     j=2,    k=3; case1: k = j = i i == 1 j == 1 k == 1 case2: