在 javascript 中, 按照惯例, 构造函数始终都应该以一个大写字母开头, 而非构造函数则应该以一个小写字母开头. 一个方法使用 new 操作符创建, 例如下面代码块中的 Person1(可以吧 Person1 看做是 Java 或 C 中的类).
- var Person1 = function(name){
- this.name = name;
- }
在 javascript 中一个类被 new 出来的会经历以下过程:
var person1 = new Person1();
等同于
- var person1 = {};
- person1.__proto__ = Person1.prototype;
- Person.call( person1 );
那么其中的__proto__是什么呢?
简单来说, 在 javascript 中每个对象都会有一个__proto__属性, 当我们访问一个对象的属性时, 如果这个对象内部不存在这个属性, 那么它就会去__proto__里去找这个属性, 这个__proto__又会有自己的__proto__, 于是就这样一直找下去, 这就是原型链的概念.
来看下面这段代码:
- var Person2 = function(){}
- Person2.prototype = {
- say: function(){
- console.log('Hello World');
- }
- }
- var person2 = new Person2();
- person2.say();
当我们调用 person2.say() 时, person2 中没有 say 属性, 于是 person2 就去__proto__属性中去找, 也就是 Person2.prototype, 而我们定义了 Person2.prototype.say = function(){}, 于是 person2 就在 Person2.prototype 中找到了这个方法.
简单来说就是: person2 => person2.__proto__ => Person2.prototype.
来源: https://www.cnblogs.com/baolevel/p/8724051.html