js原型对象继承
// 函数表达式
var f = function () {
this.s = 8
f.prototype.s = 6
}
console.log(new f().s) //8
// 函数声明
function Func() {
this.name = 1111
console.log(this)
}
Func.prototype.name = 2222
console.log(new Func().name) //111
console.log(new Func()) //Func {name: 1111}
//总结:当我们访问一个对象的属性时,首先会从自身查找有没有这个属性,当自身没有时,就会去它的原型对象查找,原型对象还没查找到,就去原型对象的对象上去查找,直到原型链的顶层找到为止
function Func1(name) {
this.name = name || "sapi"
this.say = function (prefix) {
return prefix + this.name + "-self"
}
}
Func1.prototype.say = function (prefix) {
return prefix + this.name + "-prototype"
}
console.log(new Func1().say("welcome")) //welcomesapi-self
function Func2(name) {
this.name = name || "sapi"
// 函数表达式 发现say方法不是Func2的属性
function say(prefix) {
return prefix + this.name + "-self"
}
}
Func2.prototype.say = function (prefix) {
return prefix + this.name + "-prototype"
}
console.log(new Func2().say("welcome")) //welcomesapi-prototype
js 中this指向
var obj = {
fn: function () {
setTimeout(() => {
console.log(this)
})
}
}
obj.fn() //obj 在箭头函数里面没有 this