prototype

原创 2016年05月30日 14:25:53

   prototype:显示原型。每一个函数对象都有一个显示的prototype属性,它代表了对象的原型(Function.prototype函数对象是个例外,没有prototype属性)。
        __proto__:隐式原型。每个对象都有一个名为__proto__的内部隐藏属性,指向于它所对应的原型对象(chrome、firefox中名称为__proto__,并且可以被访问到)。原型链正是基于__proto__才得以形成(注:不是基于函数对象的属性prototype)。


一些自己的练习。

1.

function A(){ };

A.prototype.aa = 10;
A.prototype.setOneName = function(oneName){
this.aa = oneName;
}

A.prototype.setOneName("fanfan");

var one = new A();
console.log("one : " , one);
console.log("one.aa : ", one.aa);
console.log("A.prototype.aa : ",A.prototype.aa);

输出结果如下:

one.aa的值应该是从原型上找到的值,而不是它自己的属性。


2.

function A(){ };

A.prototype.aa = 10;
A.prototype.setOneName = function(oneName){
this.aa = oneName;
}

A.prototype.setOneName("fanfan");

var one = new A();
console.log("one : " , one);
console.log("one.aa : ", one.aa);
console.log("A.prototype.aa : ",A.prototype.aa);


one.setOneName("jingjing");
console.log("one : ",one);
console.log("one.aa : ", one.aa);
console.log("A.prototype.aa : ",A.prototype.aa);

输出结果如下:


可见,在one没有setOneName之前,one.aa输出的是原型中的aa。在one.setOneName("jingjing");执行之后,one.aa已经改变,但是原型中的并没有改变。但是第一次输出的aa也是“jingjing”,我觉得是因为第二次设置了之后就已经改变了它的值,所以第一次输出的时候就有了这个值。


3.

function A(){ };

A.prototype.aa = 10;
A.prototype.setOneName = function(oneName){
this.aa = oneName;
}

A.prototype.setOneName("fanfan");

var one = new A();
console.log("one : " , one);
console.log("one.aa : ", one.aa);
console.log("A.prototype.aa : ",A.prototype.aa);

one.setOneName("jingjing");
console.log("one : ",one);
console.log("one.aa : ", one.aa);
console.log("A.prototype.aa : ",A.prototype.aa);

A.prototype.setOneName("haha");
console.log("one : ",one);
console.log("one.aa : ", one.aa);
console.log("A.prototype.aa : ",A.prototype.aa);

输出结果如下:


有一个问题,


为什么这部分一直是一样的?

原型中的aa的值是一样的,但是输出的时候却不是一样的。



4.

function A(){ };

A.prototype.aa = 10;
A.prototype.setOneName = function(oneName){
this.aa = oneName;
}

A.prototype.setOneName("fanfan");

var one = new A();
console.log("one : " , one);
console.log("one.aa : ", one.aa);
console.log("A.prototype.aa : ",A.prototype.aa);

one.setOneName("jingjing");
A.prototype.setOneName("haha");


console.log("-----------------------");
var another = new A();
another.setOneName("aaa");
console.log("one : ",one);
console.log("one.aa : ", one.aa);
console.log("A.prototype.aa : ",A.prototype.aa);
console.log("another : ",another);
console.log("another.aa : ", another.aa);
console.log("A.prototype.aa : ",A.prototype.aa);

输出结果如下:


设置another的aa的值并没有更改one.aa的值。


5.原型链

function A(){ };

A.prototype.aa = 10;
A.prototype.setOneName = function(oneName){
this.aa = oneName;
}

A.prototype.setOneName("fanfan");

var one = new A();

console.log("one.__proto__ === A.prototype  :  ", one.__proto__ === A.prototype) //true
console.log("A.prototype.__proto__ === Object.prototype  :  ", A.prototype.__proto__ === Object.prototype) //true
console.log("Object.prototype.__proto__  :  ", Object.prototype.__proto__) //null

输出结果如下:



版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring中原型prototype的准确使用

Spring中原型prototype的准确使用实际问题项目中,报表导出涉及到了在同一个类的两个不同方法中,都有相同的查询数据库的操作,一个方法是用于获取内容,一个是用于获取条数的,大概类似于这样:@S...
  • unifirst
  • unifirst
  • 2016年01月08日 17:04
  • 11042

js中的prototype有什么作用?

1、 prototype对象是实现面向对象的一个重要机制。每个函数也是一个对象,它们对应的类就是 function,每个函数对象都具有一个子对象prototype。Prototype ...
  • qq_34471305
  • qq_34471305
  • 2017年05月10日 20:35
  • 139

JavaScript prototype原型和原型链详解

用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了,...
  • i10630226
  • i10630226
  • 2015年10月21日 14:25
  • 1479

深入理解js的prototype以及prototype的一些应用

科技优家 2016-12-07 07:51 上一篇讲了js的prototype概念,在这里回顾一下prototype的定义: prototype是函数的一个属性,并且是函数的原型对象。引用它的...
  • u011277123
  • u011277123
  • 2016年12月08日 08:37
  • 653

彻底深刻理解js原型链之prototype,__proto__以及constructor(一)

原文地址:http://www.0313.name/2017/01/13/prototype-proto-constructor.html前言 以下概念请花费一定的时间彻底理解,才能进行下一步,思...
  • zhangliuxiaomin
  • zhangliuxiaomin
  • 2017年01月19日 18:14
  • 760

《Spring揭秘》笔记——prototype作用域的“坑”

xml配置如下 --> 相关类如下 public class MockNewPersister implements IFXNewsPersister { private...
  • sanzhongguren
  • sanzhongguren
  • 2017年05月25日 12:08
  • 290

JS经常出在面试的问题,闭包,prototype和constructor

昨天面试,面试官问我JS好不好,我说非常好。面试官说那好,闭包是什么,跟我介绍一下吧~ 说实话,这不是我第一次碰到这样的问题。至少是第三次,然而我仍然没有正视过这个问题。我正视了一些C++问题比如...
  • crazygyl
  • crazygyl
  • 2014年03月21日 18:58
  • 1278

用实例谈谈javascript中的this和prototype

js语言应用中,面向对象的思想非常
  • yingyiledi
  • yingyiledi
  • 2014年05月07日 16:32
  • 7148

spring中bean的作用域属性single与prototype的区别

1。 当一个bean的作用域设置为singleton, 那么Spring IOC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一...
  • linwei_1029
  • linwei_1029
  • 2014年01月17日 15:25
  • 10936

prototype 是什么东西,原型链的理解,什么时候用 prototype

prototype     prototype是函数对象上面预设的对象属性     1. JS中所有的东西都是对象,每个对象都有prototype这个属性,这个属性是一个对象(object)  ...
  • splendid_can
  • splendid_can
  • 2016年11月26日 14:58
  • 1964
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:prototype
举报原因:
原因补充:

(最多只允许输入30个字)