构造函数

错误之处,欢迎指正。


1. 构造函数的特性

  1. 通常使用大驼峰命名法来命名一个构造函数(普通函数使用小驼峰命名法)。
  2. 使用new关键字来使用构造函数,此时构造函数会默认返回一个对象,并且此时构造函数里面的this指向返回的这个对象。
function Person(name) {
    this.name = name;
}
const obj = new Person('chris');
console.log(obj);  
控制台输出结果
  1. 如果在构造函数中添加return并且是一个原始值,那么不会有任何影响,构造函数依然返回构造的对象;如果是一个引用值,那么构造函数会返回这个引用值。
  2. 如果使用new关键字使用构造函数,此时new.target是该函数体,如果不是使用newnew.targetundefined。可以用来检测是否是用new关键字使用构造函数。
  3. 对象都是通过构造函数构造出来的。
const obj = {
    name: 'chris'
}

诸如我们平时的声明一个对象的写法,其实是一种语法糖,实际上:

const obj = new Object();
obj.name = 'chris';

实际上function也是通过构造函数Function构造出来的,函数字面量的写法也属于一种语法糖。那么实际上可以有这样的关系:Function构造一个构造函数,构造函数产生对象。

  1. 为了增强原始类型的功能,javascript创建了BooleanNumberString三个构造函数。当把一个原始类型当对象使用时,javascript就会自动new 构造函数()来调用属性。
const id = 123.123;
console.log(id.toFixed(2));  //123.12 实际上:
console.log(new Number(id).toFixed(2));  //123.12  构造函数返回对象,对象上面有属性
  1. 实例/成员属性,通过构造函数创建的对象调用的属性。
function Person() {
    this.name = 'chris';
}
const me = new Person();
console.log(me.name);  //chris 实例属性

function的实例方法call

function test() {
    console.log(this.chris);
} 
test();  //this指向window 输出undefined
const testObj = {
    chris: 'handsome'
}
test.call(testObj);  //handsome

call方法调用一个函数时,可以改变函数中this的指向,如上述例子中,用calltest函数中的this指向testObj
callapply的区别就在于传参方式不同。

function test(chris, age) {
    console.log(chris);
    console.log(age);
}
const testObj = {};
test.apply(testObj, ['handsome', 22]);  //handsome 22
test.call(testObj, 'handsome', 23);  //handsome 23

apply传参时要放在数组里面。
bind用法:

function test(chris, age) {
    console.log(chris);
    console.log(age);
}
const testObj = {};
const newFunc = test.bind(testObj, 'handsome', 22); 
newFunc(); //handsome 22
newFunc(); //handsome 22

通常用call或者apply来将一个类数组转换成数组:

function test() {
    console.log(arguments);  //类数组
    console.log(Array.isArray(arguments));  //false  用Array构造函数的静态方法判断arguments是不是数组
    const newArr = Array.prototype.slice.call(arguments); //调用Array原型上的slice方法,并且此时this指向arguments,不传参就代表不截取,返回完整数组。
    console.log(Array.isArray(newArr));  //true
    console.log(newArr); //[1,2,3,4,5]
}
test(1,2,3,4,5);
  1. 静态属性是指通过构造函数调用的属性。
function Person() {}
Person.type = 'human';
const me = new Person();
console.log(Person.type);  //human  静态属性
console.log(me.type);  //undefined

Object的静态属性:

function Person(name, age) {
    this.name = name;
    this.age = age
}
const me = new Person('chris', 22);
console.log(Object.keys(me));  //["name", "age"]
console.log(Object.values(me));  //["chris", 22]
console.log(Object.entries(me));  //[["name", "chris"], ["age", 22]]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容