再说javascript 的__proto__ 和prototype 属性

过了一段时间,没写 原生的 javascript 的了,感觉天天在用框架写代码,框架写代码完全限定死了你所需要思考的东西,只是在处理一些业务逻辑,真正的代码

都感觉不会写了。 突然发现,框架用的不熟悉,原生的代码也忘得差不多了。感觉很难受,人生不能这样子度过!

  重新翻开《javascript 高级程序设计》, 回归到本原。工作上用框架写代码没错,业余时间的话就要自己多写一点原生的代码,或者说研究、模仿、直到自己设计一个

框架出来。

js 中的类, 对象, 类的静态变量,类的继承 。
function Scope(){
}

这样就是定义了一个类了。

-------------------------------------------------------------------

This figure again shows that every object has a prototype. Constructor function Foo also has its own __proto__ which is Function.prototype, and which in turn also references via its __proto__property again to the Object.prototype. Thus, repeat, Foo.prototype is just an explicit property of Foo which refers to the prototype of b and c objects.

var b = new Foo(20);
var c = new Foo(30);

What are the differences between __proto__ and prototype properties?


up vote23down vote

Prototype VS. __proto__ VS. [[Prototype]]

When creating a function, a property object called prototype is being created automatically (you didn‘t create it yourself) and is being attached to the function object (the constructor).
Note: This new prototype object also points to, or has an internal-private link to, the native JavaScript Object.

Example:

function Foo () {
    this.name = ‘John Doe‘;
}

// Foo has an object property called prototype.
// prototype was created automatically when we declared the function Foo.
Foo.hasOwnProperty(‘prototype‘); // true

// Now, we can assign properties to to the prototype object without declaring it first.
Foo.prototype.myName = function () {
    return ‘My name is ‘ + this.name;
}

If you will create a new object out of Foo using the new keyword, you basically creating (among other things) a new object that has an internal or private link to the function‘s prototype Foo we discussed earlier:

var b = new Foo();

b.[[Prototype]] === Foo.prototype  // true

The private linkage to that function‘s object called [[Prototype]]. Many browsers are providing us with a public linkage instead that called __proto__!

To be more specific, __proto__ is actually a getter function that belong to the native JavaScript Object and returns the internal-private prototype linkage of whatever the this binding is (returns the [[Prototype]] of b):

b.__proto__ === Foo.prototype // true

It is worth noting that starting of ECMAScript5, you can also use the getPrototypeOf method to get the internal private linkage:

Object.getPrototypeOf(b) === b.__proto__ // true

NOTE: this answer doesn‘t intend to cover the whole process of creating new objects or new constructors, but to help better understand what is __proto__prototype and [[Prototype]] and how it works.
时间: 2024-10-27 12:05:08

再说javascript 的__proto__ 和prototype 属性的相关文章

javaScript中__proto__与prototype的区别与联系

[转]javaScript中__proto__与prototype的区别与联系 2014-5-4阅读490 评论0 最近在学习javascript的原型,发现了__proto__与prototype,学问很大,于是研究了一下. 首先解释一下什么是原型? 原型是一个对象,其他对象可以通过它实现属性继承. 对象又是什么呢? 在javascript中,一个对象就是任何无序键值对的集合,如果它不是一个主数据类型(undefined,null,boolean,number,array,string),那它

JavaScript中__proto__与prototype的关系

一.所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) 1 2 3 4 5 6 7 8 9 Number.__proto__ === Function.prototype  // true Boolean.__proto__ === Function.prototype // true String.__proto__ === Function.prototype  // true Object.__proto__ ==

JavaScript中__proto__与prototype的关系(转)

一.所有构造器/函数的__proto__都指向Function.prototype,它是一个空函数(Empty function) 1 2 3 4 5 6 7 8 9 Number.__proto__ === Function.prototype  // true Boolean.__proto__ === Function.prototype // true String.__proto__ === Function.prototype  // true Object.__proto__ ==

【JavaScript】__proto__和prototype的区别和联系【整理】

prototype: Function有内置的prototype属性,而Object没有.其实这一点与上一点有着很大的关系,正是因为有了把Function当做构造函数的功能,我们才需要prototype属性.只要记住一点,prototype只有Function才有. _Proto_: 一个与 prototype 遥相呼应的属性是 __proto__(请注意有 proto 两边各有两个下划线),一个实例的 __proto__ 属性指向创建该实例的类的 prototype 对象. 区别: __pro

javascript中__proto__与prototype的关系及原型继承的原理

1.__proto__与prototype的关系 所有对象的__proto__都指向其构造器的prototype var a = {"test":'mico',"age":"18"}; var b = function(){}; var c = new Date(); var d = /^[\d]$/; alert(a.__proto__ == Object.prototype); //true alert(b.__proto__ == Func

Javascript深入__proto__和prototype的区别和联系

有一个一个装逼的同事,写了一段代码 function a(){} a.__proto__.__proto__.__proto__ 然后问我,下面这个玩意a.__proto__.__proto__.__proto__是啥,然后我一脸懵逼,prototype还知道一点,这个__proto__,还来三个,是个什么鬼.于是我一直不能放下这个问题,虽然我很懒,很不喜欢费脑子,但是这个坎还是过不去,最近两天研究了大半天,就有了这篇文章.我先说出答案, 上面的值为 null.我还很负责的告诉你,下面的_a._

Javascript之 __proto__ 与 prototype

__proto__(隐式原型)与prototype(显式原型) 是什么? 显式原型 explicit prototype property: 每一个函数在创建之后都会拥有一个名为prototype的属性,这个属性指向函数的原型对象. 隐式原型 implicit prototype link: JavaScript中任意对象都有一个内置属性[[prototype]],在ES5之前没有标准的方法访问这个内置属性, 但是大多数浏览器都支持通过__proto__来访问.ES5中有了对于这个内置属性标准的

javascript中各类的prototype属性

prototype 作用:获取调用对象的对象原型引用 应用:可以为某对象原型添加方法 例: function getMax() { var max = this[0]; for(var x=0; x<this.length; x++) { if(this[x] > max) max = this[x]; } return max; } Array.prototype.getMax = getMax; //以后数组使用获取最大值的方法就可以如下调用,例如arr是以个整数数组 arr.getMax

JavaScript:prototype属性使用方法

原文:https://www.cnblogs.com/lidabo/archive/2012/01/05/2313481.html https://www.cnblogs.com/wdlhao/p/5743770.html prototype就是"一个给类的对象添加方法的方法",使用prototype属性,可以给类动态地添加方法,以便在JavaScript中实现"继承"的效果. 具体来说,prototype 是在 IE 4 及其以后版本引入的一个针对于某一类的对象的