es5的构造函数前面如果不用new调用,this指向window,对象的属性就得不到值了,所以以前我们都要在构造函数中通过判断this是否使用了new关键字来确保普通的函数调用方式都能让对象复制到属性
function Person( uName ){
if ( this instanceof Person ) {
this.userName = uName;
}else {
return new Person( uName );
}
}
Person.prototype.showUserName = function(){
return this.userName;
}
console.log( Person( 'ghostwu' ).showUserName() );
console.log( new Person( 'ghostwu' ).showUserName() );
在es6中,为了识别函数调用时,是否使用了new关键字,引入了一个新的属性new.target:
1,如果函数使用了new,那么new.target就是构造函数
2,如果函数没有用new,那么new.target就是undefined
3,es6的类方法中,在调用时候,使用new,new.target指向类本身,没有使用new就是undefined
function Person( uName ){
if( new.target !== undefined ){
this.userName = uName;
}else {
throw new Error( '必须用new实例化' );
}
}
// Person( 'ghostwu' ); //报错
console.log( new Person( 'ghostwu' ).userName ); //ghostwu
使用new之后, new.target就是Person这个构造函数,那么上例也可以用下面这种写法:
function Person( uName ){
if ( new.target === Person ) {
this.userName = uName;
}else {
throw new Error( '必须用new实例化' );
}
}
// Person( 'ghostwu' ); //报错
console.log( new Person( 'ghostwu' ).userName ); //ghostwu
class Person{
constructor( uName ){
if ( new.target === Person ) {
this.userName = uName;
}else {
throw new Error( '必须要用new关键字' );
}
}
}
// Person( 'ghostwu' ); //报错
console.log( new Person( 'ghostwu' ).userName ); //ghostwu
上例,在使用new的时候, new.target等于Person
掌握new.target之后,接下来,我们用es5语法改写上文中es6的类语法
let Person = ( function(){
'use strict';
const Person = function( uName ){
if ( new.target !== undefined ){
this.userName = uName;
}else {
throw new Error( '必须使用new关键字' );
}
}
Object.defineProperty( Person.prototype, 'sayName', {
value : function(){
if ( typeof new.target !== 'undefined' ) {
throw new Error( '类里面的方法不能使用new关键字' );
}
return this.userName;
},
enumerable : false,
writable : true,
configurable : true
} );
return Person;
})();
console.log( new Person( 'ghostwu' ).sayName() );
console.log( Person( 'ghostwu' ) ); //没有使用new,报错
以上这篇js es6系列教程 - 基于new.target属性与es5改造es6的类语法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# es6
# new.target
# javascript new.target的学习笔记
# 报错
# 给大家
# 使用了
# 可以用
# 要在
# 希望能
# 能让
# 要用
# 就得
# 这篇
# 写上
# 小编
# 大家多多
# 引入了
# console
# return
# instanceof
# log
# prototype
# showUserName
相关文章:
如何通过商城自助建站源码实现零基础高效建站?
网站制作说明怎么写,简述网页设计的流程并说明原因?
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
香港服务器如何优化才能显著提升网站加载速度?
如何在万网开始建站?分步指南解析
自助网站制作软件,个人如何自助建网站?
制作网站怎么制作,*游戏网站怎么搭建?
如何打造高效商业网站?建站目的决定转化率
网站制作费用多少钱,一个网站的运营,需要哪些费用?
建站之星导航配置指南:自助建站与SEO优化全解析
C++用Dijkstra(迪杰斯特拉)算法求最短路径
微信推文制作网站有哪些,怎么做微信推文,急?
高端建站如何打造兼具美学与转化的品牌官网?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
网站制作需要会哪些技术,建立一个网站要花费多少?
专业公司网站制作公司,用什么语言做企业网站比较好?
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星安装路径如何正确选择及配置?
如何通过西部建站助手安装IIS服务器?
建站之星上传入口如何快速找到?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
如何在阿里云服务器自主搭建网站?
公司门户网站制作流程,华为官网怎么做?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解
,巨量百应是干嘛的?
如何用西部建站助手快速创建专业网站?
如何获取PHP WAP自助建站系统源码?
定制建站模板如何实现SEO优化与智能系统配置?18字教程
安徽网站建设与外贸建站服务专业定制方案
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
建站之星免费模板:自助建站系统与智能响应式一键生成
建站之星如何快速解决建站难题?
如何快速搭建高效WAP手机网站吸引移动用户?
高端云建站费用究竟需要多少预算?
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
如何高效搭建专业期货交易平台网站?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
C#怎么创建控制台应用 C# Console App项目创建方法
如何配置WinSCP新建站点的密钥验证步骤?
如何零基础开发自助建站系统?完整教程解析
如何彻底卸载建站之星软件?
javascript基本数据类型及类型检测常用方法小结
*请认真填写需求信息,我们会在24小时内与您取得联系。