Blogger Information
Blog 1
fans 0
comment 0
visits 553
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
js里的proto和prototype到底有什么区别?
张小灰
Original
554 people have browsed it
  1. js里的proto和prototype到底有什么区别?

学了这么多年前端,一直搞不明白proto和prototype的区别,实在惭愧,是时候总结一下了。。以下是学习时的记录,若有错误之处,请指出。。
首先声明:
1.在JS里,万物皆对象。方法(Function)是对象,方法的原型(Function.prototype)是对象。因此,它们都会具有对象共有的特点。即:<strong>对象具有属性proto,可称为隐式原型,一个对象的隐式原型指向构造该对象的构造函数的原型,这也保证了实例能够访问在构造函数原型中定义的属性和方法。</strong>
2.方法(Function)方法这个特殊的对象,除了和其他对象一样有上述proto属性之外,还有自己特有的属性——原型属性(prototype),这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。
<strong>1.1</strong>首先声明一个对象和一个函数,console.log一下对象和函数的proto
var A = function () {};
var B ={};

console.log(A.proto)
console.log(B.proto)

控制台输出结果如下图所示:

刚才不是说函数是对象吗?它们的proto为啥不一样?往下看,别着急。
var A = function () {};
var B ={};
console.log(A.proto.proto)
console.log(B.proto)

console.log结果如下:

是不是一样了,,确实有点懵逼啊。。重点 <strong>隐式原型指向构造该对象的构造函数的原型</strong>。因为function是特殊的对象,A.proto就指向了构造该函数的一个函数(随意起个名字 C),C的proto就指向了和B对象一样的proto。。我自己都懵逼了。
<strong>1.2</strong>一个对象和一个函数,console.log一下对象和函数的prototype
var A = function () {};
var B ={};
console.log(A.prototype)
console.log(B.prototype)

console.log结果如下:

对象并不具有prototype属性,只有函数才有prototype属性。这就证明声明2的说法是正确的。
总结:
      1.js里所有的对象都有proto属性(对象,函数),指向构造该对象的构造函数的原型。
      2.只有函数function才具有prototype属性。这个属性是一个指针,指向一个对象,这个对象的用途就是包含所有实例共享的属性和方法(我们把这个对象叫做原型对象)。原型对象也有一个属性,叫做constructor,这个属性包含了一个指针,指回原构造函数。

参考这篇文章
刚开始看实在太绕了,有时候自己把自己都绕进去了,多动手敲代码,敲着敲着就明白了。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post