作用域安全的构造函数
一般构造函数定义和调用如下:
function Person(name,age,job)
{
this.name=name;
this.age=age;
this.job=job;
}
var person=new Person('thinksley',24,'web developer');
console.log(person.name); //thinksley
而如果实例化对象的时候不用new的话,this会映射到全局的window对象上,这时候person.name就会变成undefined了,要把对象改成window:
function Person(name,age,job)
{
this.name=name;
this.age=age;
this.job=job;
}
var person=Person('thinksley',24,'web developer');
console.log(window.name);//thinksley
console.log(person.name);//undefined
那么完整的构造函数可以用if判断来做了,如下
function Person(name,age,job)
{
if(this instanceof Person)
{
this.name=name;
this.age=age;
this.job=job;
}
else
{
return new Person(name,age,job);
}
}
var person=Person('thinksley',24,'web developer');
console.log(person.name);//thinksley
var person=new Person('thinksley',24,'web developer');
console.log(person.name); //thinskley
这样构造函数就确保了this是否是Person对象的实例,要么使用new操作符,要么在现有的person实例环境中调用构造函数。
转载于:https://www.cnblogs.com/thinksley/archive/2013/02/24/2924098.html
作用域安全的构造函数相关推荐
- 如何写一个作用域安全的构造函数
基础部分 构造函数本质上就是一个使用new操作符调用的函数,使用new调用时,构造函数内用到的this对象会指向新创建的对象实例: function Girlfriend(name, age, hei ...
- Javascript作用域问题的构造函数的变量
构造函数new对于使用.代表创建对象.此外,它可以被用作普通的函数调用,因为它也是一个功能. function Person(name) {this.name=name; }Person(12); a ...
- 由作用域安全的构造函数想到的
PHP中定义的每一个变量对象,都是$GLOBALS的属性,因为PHP本身就是面向对象的,但是JavaScript的核心语法是面向过程的,ECMAScript 标准没有规定全局对象的类型,JavaScr ...
- 相学java_从这两套题,重新认识JS的this、作用域、闭包、对象
日常开发中,我们经常用到this.例如用Jquery绑定事件时,this指向触发事件的DOM元素:编写Vue.React组件时,this指向组件本身.对于新手来说,常会用一种意会的感觉去判断this的 ...
- 《JavaScript忍者秘籍》(第二版)- 第5章 -精通函数:闭包和作用域
目录 第5章 精通函数:闭包和作用域 5.1 理解闭包 5.2 使用闭包 5.2.1 封装私有变量 5.2.2 回调函数 5.3 通过执行上下文来跟踪代码 5.4 使用词法环境跟踪变量的作用域 5.4 ...
- 《JavaScript面向对象精要》读书笔记
JavaScript(ES5)的面向对象精要 标签: JavaScript 面向对象 读书笔记 2016年1月16日-17日两天看完了<JavaScript面向对象精要>(参加异步社区的活 ...
- js 设计模式与继承学习
设计模式 创建自定义对象的最简单方式是new 一个object对象,然后给它添加方法与属性 如: 1 var person = new Object(); 2 person.name = " ...
- 前端红宝书《JavaScript高级程序设计》核心知识总结
此文是对<JavaScript 高级程序设计>一书难点的总结,也是笔者在看了 3 遍之后的一些梳理和感想,希望能借此巩固js的基础和对一些核心概念有更深入的了解. 摘要 JS基本的数据类型 ...
- 《JavaScript高级程序设计》(第2版)上市
本书是技术畅销书<JavaScript高级程序设计> 的第2版,几乎全部更新.重写 了上一版的内容,融入了作者近几年来奋战在前端开发一线的宝贵经验 , 是学习和提高JavaScript ...
最新文章
- 你会不会用mysql查询近7个月的数据?没有记录默认为空
- Spring 注解配置
- 计算机硬件系统设计mooc,计算机硬件系统设计MOOC答案
- XP+UBUNTU双系统上重装XP后修复GRUB方法
- iOS编程——经过UUID和KeyChain来代替Mac地址实现iOS设备的唯一标示(OC版)
- UVa11292 - Dragon of Loowater (贪心+模拟)
- Simulink之变压器漏抗对整流电路的影响
- 网站程序 Bin目录下 dll无法删除,删除并编译后自动重新引用的解决方法
- paip.android环境搭建与开发事例
- c语言题目关于欧姆定律,电压_电流_电阻_欧姆定律计算含答案.doc
- w7计算机文件夹打开怎么设置密码,win7电脑文件夹怎么设置密码
- eNSP实验三:OSPF路由协议
- 中医针灸学综合练习题库【5】
- bzoj1720[Usaco2006 Jan]Corral the Cows 奶牛围栏
- 为什么下载那种小电影时,经常会卡在99%?
- 基于Springboot实现在线学习管理平台
- 50页智慧校园解决方案[附下载]
- 计算机是人类文化发展的第几个里程碑,人类已经无法阻止!人工智能的十个重要里程碑...
- IPETRONIK活塞式发动机试验方案
- 用lua 实现一个 nginx 负载均衡