外贸公司网站建设 重点是什么外国人做的学汉字网站
原型:函数都有prototype属性,称之为原型,也称为原型对象
 原型可以放一些属性和方法,共享给实例对象使用
 原型可以做继承
原型链:对象都有__proto__属性,这个属性指向它的原型对象,原型对象也是对象,也有__proto__属性,指向原型对象的原型对象,这样一层一层形成的链式结构称为原型链,最顶层找不到则返回 null

1.javascript原型链(经典函数构造器 + prototype)
function Person(name) {this.name = name;
}Person.prototype.sayHello = function() {console.log(`Hello, my name is ${this.name}`);
};const alice = new Person('Alice');
alice.sayHello();  // Hello, my name is Aliceconsole.log(alice.__proto__ === Person.prototype);  // true
console.log(Person.prototype.__proto__ === Object.prototype);  // true
console.log(Object.prototype.__proto__);  // null
 
解释:
-  
每个对象都有一个内部属性
[[Prototype]](常用__proto__访问),指向它的原型对象。 -  
当访问对象的属性或方法时,如果自身没有,会沿着
[[Prototype]]一层层往上找,这个查找链就是原型链。 -  
上面例子中,
alice访问sayHello方法时没在自身属性里找到,就去它的原型对象Person.prototype查找。 -  
Person.prototype的原型是Object.prototype,这构成了原型链的多层关系。 -  
Object.prototype的原型是null,链条终点。 
2.TypeScript 版本(class 语法)
class Person {name: string;constructor(name: string) {this.name = name;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}const alice = new Person('Alice');
alice.sayHello();  // Hello, my name is Aliceconsole.log(Object.getPrototypeOf(alice) === Person.prototype);  // true
console.log(Object.getPrototypeOf(Person.prototype) === Object.prototype);  // true
console.log(Object.getPrototypeOf(Object.prototype));  // null
 
解释:
-  
TypeScript 使用
class关键字声明类,语法更现代,代码更清晰。 -  
sayHello是类的方法,实际挂载在Person.prototype上,实例通过原型链访问。 -  
Object.getPrototypeOf()用来获取对象的原型,效果和__proto__类似,但更标准安全。 -  
原型链关系和JavaScript版本完全一样:实例原型 → 类的
prototype→Object.prototype→null。 
3.总结
-  
JavaScript版本用构造函数和显式原型,适合传统理解原型链机制。
 -  
TypeScript版本用类语法,更符合现代代码风格,本质上还是基于JavaScript原型链实现。
 
