前言
有一说一,当你对原型掌握的懵懵懂懂,却又妄图掌握的清清楚楚的时候,你会发现即使一个new操作符,你都不是那么明白。
开门见山
直接贴例子了:
function Test(name) {
this.name = name;
let nick = name;
return nick;
}
Test.prototype.sayName = function () {
console.log(this.name)
}
const a = new Test('a')
const b = Test('b')
这段吧,其实也好懂,new 通过构造函数 Test 创建出来的实例可以访问到构造函数中的属性,但仅仅是实例属性,像是私有属性如nick,new出来的新的对象是没有办法访问到的。new 通过构造函数 Test 创建出来的实例可以访问到构造函数原型链中的属性,也就是说通过 new 操作符,实例与构造函数通过原型链连接了起来。
而关于b我就不用过多解释了。
但是如果返回值是一个对象:
function Test(name) {
this.name = name;
let nick = name;
return {nick: name};
}
我们使用new得到的即是:
{nick:'bb'}
一个题目
function F() {
this.a = 1
this.f = function() {
this.a = 3
}
}
F.f = function() {
this.a = 2
}
var r = new F.f()
那么r会是什么呢?
这里就涉及到了运算符的优先级的问题,在这个题目中,F.f是最高优先级,所以最后得到的结果是:
{a:2}