刚刚学JS,对原型链编程有些困惑

我写了这个一个代码:

    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的值
// 但是你在第一步没通过,所以永远没法用第二步拿到值

https://blog.csdn.net/rhythm923/article/details/72730533

https://blog.csdn.net/xiaoermingn/article/details/80745117