我写了这个一个代码:
a.prototype.count=0; //在原型链上定义一个变量
function a(){
console.log(count); //期待在自身没有count时,去原型链上找到count,但在这里找不到!
return count++;
}
console.log(a.prototype); //结果是 obj
console.log(a()); //执行函数时出错 count is not defined
而如果这样写:
Object.prototype.count=0; //在原型链上定义一个变量
function a(){
console.log(count); //期待在自身没有count时,去原型链上找到了count
return count++;
}
// a.prototype.count=0;
console.log(a()); //成功 0
console.log(a()); //成功 1
这是为什么呢?
count是实例对象的属性,要生成实例对象后才能访问到count属性。而且原型中访问count要用this来访问。这个和oo语言中实例属性一样,必须要要生成实例对象后,通过实例对象来访问
帮助到你能点个采纳吗,谢谢~
a.prototype.count = 0; //在原型链上定义一个变量
function a() {
console.log(this.count);
return this.count++;
}
var obja = new a()//
console.log(obja.count)
因为a会被替换。
定义一个对象,是需要声明的。通常来说定义一个变量需要先声明对象。
var object = new Object();
object.name = "a";
这两篇你结合看一下,这种方式声明的方法是个构造函数,a.prototype赋值的内容,是对实例化后的对象有效
但是你构造函数中不存在count会导致实例化失败,所以就一直拿不到a.prototype的值
为什么Object.prototype能用,在第二篇文章中,有它的取值图解,你看下就明白了
lat var1 = new a()
var1.count // 这里会有a.prototype.count的值
// 但是你在第一步没通过,所以永远没法用第二步拿到值