JS构造函数中有return
function foo(name) {
this.name = name;
return name
}
console.log(new foo('光何'))
function bar(name) {
this.name = name;
return ['光','何']
}
console.log(new bar('光何'))
结果为:
'ooo {name: "光何"}'
'Array(4) ["光", "何"]'
创建JS对象两种方式
在JavaScript中,创建对象的方式包括两种:对象字面量和使用new表达式。对象字面量是一种灵活方便的书写方式,例如:
var o = {
name : '光何'
}
new表达式是配合构造函数使用的:
function O(name){
this.name = name;
}
var o = new O('光何');
那么,在使用new操作符来调用一个构造函数的时候,发生了什么呢?其实很简单,就发生了四件事:
var obj ={};
obj.__proto__ = CO.prototype;
CO.call(obj);
return obj;
第一行,创建一个空对象obj。
第二行,将这个空对象的proto成员指向了构造函数对象的prototype成员对象,这是最关键的一步。
第三行,将构造函数的作用域赋给新对象,因此CA函数中的this指向新对象obj,然后再调用CO函数。于是我们就给obj对象赋值了一个成员变量name,这个成员变量的值是"光何"。
第四行,返回新对象obj。这一步就是我们需要注意的地方,构造器中如果包含返回值。
构造函数
如果没有按照正确的方法书写构造函数的话,就像本文上文中出现的情况。就会造成一些难以估计的后果。
一个函数,要做为一个真正意义上的构造函数,要满足以下条件。
1、 在函数内部对新对象(this)的属性进行设置,通常是添加属性和方法。
2、 构造函数可以包含返回语句(不推荐),但返回值必须是this,或者其它非对象类型的值。
如上文中 我们的构造函数中返回了参数name,如果参数是普通值(非引用类型),则不会发生什么影响,但是如果值是引用类型(如对象,数组等),则我们new 出来的对象就会被返回的引用类型值给替换了。
可以看出:在JavaScript构造函数中:如果return值类型,那么对构造函数没有影响,实例化对象返回空对象;如果return引用类型(数组,函数,对象),那么实例化对象就会返回该引用类型;
JS构造函数中有return的更多相关文章
- 牛客网Java刷题知识点之构造函数与set方法、与类名同名的一般方法、构造函数中有return语句
不多说,直接上干货! 通过 牛客网Java刷题知识点之构造函数是什么.一般函数和构造函数什么区别呢.构造函数的重载.构造函数的内存图解 我们对构造函数有了一个比较清楚的认识,当我们在创建对象时,我们会 ...
- js 构造函数中的 return
本文链接:https://blog.csdn.net/qq_36209248/article/details/89190978 默认情况下,没有return的函数的返回值为undefined(即没有定 ...
- JS构造函数的用法和JS原型
$(function(){ var rec = new Rectangle(5, 10); //alert(rec.width + "*" + rec.height + " ...
- 构造函数用return 会出显什么情况
首先我们都知道js中构造函数一般应该是这样的 function Super (a) { this.a = a; } Super.prototype.sayHello = function() { al ...
- js 构造函数 & 静态方法 & 原型 & 实例方法
js 构造函数 & 静态方法 & 原型 & 实例方法 ES5 "use strict"; /** * * @author xgqfrms * @licens ...
- [c++] 子类构造函数中有默认参数
子类创建对象时调用父类的构造函数: 1 #include <iostream> 2 using namespace std; 3 class Base 4 { 5 public: 6 Ba ...
- 从一个例子讲解拷贝构造函数与return
#include "iostream" using namespace std; class Location { public: Location(, ) { X = xx; Y ...
- 谈谈JS构造函数
//构造函数 //使自己的对象多次复制,同时实例根据设置的访问等级可以访问其内部的属性和方法 //当对象被实例化后,构造函数会立即执行它所包含的任何代码 function myObject(msg) ...
- Class和普通js构造函数的区别
Class 在语法上更加贴合面向对象的写法 Class 实现继承更加易读.易理解 更易于写 java 等后端语言的使用 本质还是语法糖,使用 prototype Class语法 typeof Math ...
随机推荐
- Redis主从同步之主库挂死解决方案
Redis实现了主从同步,但是主库挂死了,如何处理 方案:切换主库的身份 # 连接从库 [root@localhost redis-]# redis-cli -p # 取消从库身份 > slav ...
- curl-手册
Manual -- curl usage explained Related: Man Page FAQ LATEST VERSION You always find news about wha ...
- HTML&CSS基础-子元素的伪类选择器
HTML&CSS基础-子元素的伪类选择器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html的源代码 <!DOCTYPE html> <html& ...
- Centos7.3云服务器上安装Nginx、MySQL、JDK、Tomcat环境
安装的软件路径建议放到/usr/local目录下 Tomcat 首先从最简单的Tomcat开始,进入到Apache的官网:http://www.apache.org,下载合适的版本来装,一般建议8.0 ...
- JavaScript解析机制之变量提升
1.什么是预解析? 在当前作用域下,JS 运行之前,会把带有 var 和 function 关键字的事先声明,并在内存中安排好.(这个过程也可以理解为变量提升)然后再从上到下执行 JS 语句(预解析只 ...
- IDEA 相关设置汇总
1.自动提示.代码补全 有时候希望使用自动补全,因为不偷懒的程序员不是好程序员.但是Idea的默认快捷键是 Ctrl + 空格. 对于安装中文输入法的普通人来说那就是杯具了,你懂的. 修改方法如下: ...
- koa2 快速开始
环境准备 Node.js简介 因为node.js v7.6.0开始完全支持async/await,不需要加flag,所以node.js环境都要7.6.0以上.Node.js 是一个基于 Chrome ...
- 学习Spring-Data-Jpa(三)---关联关系常用注解
1.@JoinColumn: 用于指定 连接实体关联或元素集合的列. 属性 name: 外键列的名称,它所在的表取决于上下文. 如果连接是使用外键映射策略的一对一或多对一映射,则外键列位于源实体或可嵌 ...
- Map的常用实现类及Entry的用法
public static void main(String[] args) { //map 键值对 json格式根据你的键名来获取对应的值 //特点 :无序.以键值对的形式添加元素,键不 ...
- rc.local配置
1.让系统默认启动的时候执行rc.local 启动我们想要启动进程:如:nginx ,memcached,或者是 php-fpm等! /usr/local/bin/redis-server /etc/ ...