console.log('-----------------------------Object');

var obj = {};
console.log(obj.__proto__ === Object.prototype); // true
console.log(Object.prototype); // Object
console.log(obj.prototype); // undefined console.log('-----------------------------Function'); // prototype is a Object property of a Function
var func = function () {};
console.log(func.__proto__ === Function.prototype); // true
console.log(func.prototype === Function.prototype); // false
console.log(func.prototype === Object.prototype); // false console.log(func.__proto__.__proto__ === Object.prototype); // true
console.log(func.prototype.__proto__ === Object.prototype); // true console.log('-----------------------------new func'); // we look for say from this, then from __proto__ up
func.say = function () { console.log('func say'); }
func.__proto__.say = function () { console.log('func proto say'); }
func.prototype.say = function () { console.log('func prototype say'); } // From this, we know that __proto__ is only used as pointer to find parent proto.
// And what the newed object has is determined by its prototype, and prototype.__proto__ etc.
//func.prototype.__proto__ = func.__proto__; var new_func = new func();
new_func.say();
func.say(); // var new_func = {};
// new_func.__proto__ = func.prototype;
// func.call(new_func); console.log(new_func.__proto__ === func.prototype); // true
console.log(new_func.prototype); // undefined, as it's an Object func.prototype.say = function () { console.log('func prototype say 2'); }
new_func.say(); // say 2 console.log('-----------------------------derived'); var de_func = function () { };
de_func.prototype.__proto__ = func.prototype; var new_de = new de_func();
new_de.say(); // remember:
// 1. var x = new obj(); means x.__proto__ = obj.prototype
// 2. we look for member from this first, then from this.__proto__

语法——原型prototype深入理解的更多相关文章

  1. 原型prototype -- 深入理解javascript

    /* 原型Prototype */ //一.原型 //原型使用一 var calculator = function (dlg, tax) { this.dlg = dlg; this.tax = t ...

  2. 简单理解javascript的原型prototype

    原型和闭包是Js语言的难点,此文主要讲原型. 每一个方法都有一个属性是 prototype 每一个对象都有一个属性是 _proto_ 一旦定义了原型属性或原型方法,则所有通过该构造函数实例化出来的所有 ...

  3. 构造函数、原型对象prototype、实例、隐式原型__proto__的理解

    (欢迎一起探讨,如果有什么地方写的不准确或是不正确也欢迎大家指出来~) PS: 内容中的__proto__可能会被markdown语法导致显示为proto. 建议将构造函数中的方法都定义到构造函数的原 ...

  4. 关于构造函数和原型prototype对象的理解

    构造函数     1.什么是构造函数 构造函数,主要用于对象创建的初始化,和new运算符一起用于创建对象,一个类可以有多个构造函数,因为函数名相同,所以只能通过参数的个数和类型不同进行区分,即构造函数 ...

  5. 对原型(prototype)理解?

    Javascript是一种通过原型实现继承的语言,与别的高级语言是有区别的,像Java,C#是通过类型决定继承关系的,JavaScript是的动态的弱类型语言,总之可以认为JavaScript所有都是 ...

  6. 关于JS对象原型prototype与继承,ES6的class和extends · kesheng's personal blog

    传统方式:通过function关键字来定义一个对象类型 1234567891011 function People(name) { this.name = name}People.prototype. ...

  7. 关于 this 和 prototype 的理解

    1:this 的理解比较好的书是 <Javascript语言精粹> 平时我们全局写 var a = 1, 其实就是 window.a = 1; var f = function(){},  ...

  8. 类(class)、构造函数(constructor)、原型(prototype)

    类 Class 类的概念应该是面向对象语言的一个特色,但是JavaScript并不像Java,C++等高级语言那样拥有正式的类,而是多数通过构造器以及原型方式来仿造实现.在讨论构造器和原型方法前,我可 ...

  9. 悟透Javascript之 原型prototype

    构造函数的Prototype上定义的方法确实可以通过对象直接调用,而且代码是共享的.我表示我不懂.太难理解了,艹.在Javascript中,prototype不但能让对象共享自己的财富,而且proto ...

随机推荐

  1. Material Designer的低版本兼容实现(十三)—— ProgressBar

    进度条我们都很常见了,新的设计规范中提出了各式各样的进度条,本篇就会介绍大部分进度条的实现.实现方式和规范的示例图可能略有差异,还是那句话根据具体需求进行改变吧. PS:本文较长 参考文档:http: ...

  2. linux文件去重工具findup, fslint-gui

    findup, fslint-gui,图形化工具,直接使用

  3. redis 负载均衡 集群配置

    redis 官网 http://redis.io/ 中文网站 http://redis.cn/ 谷歌代码的redis项目 https://code.google.com/p/redis/ http:/ ...

  4. NIO中的heap Buffer和direct Buffer区别

    在Java的NIO中,我们一般采用ByteBuffer缓冲区来传输数据,一般情况下我们创建Buffer对象是通过ByteBuffer的两个静态方法: ByteBuffer.allocate(int c ...

  5. Java NIO SocketChannel

    A Java NIO SocketChannel is a channel that is connected to a TCP network socket. It is Java NIO's eq ...

  6. WebFormViewEngine及用户控件寻址bug

    在做我的网站的时候遇到了主题切换的问题,特总结与大家共享. 熟悉asp.net mvc的朋友都知道,mvc中,默认情况下视图都在views文件夹下放着.要想改变文件必须重写WebFormViewEng ...

  7. HTML JS 数据校验

    用到了html字符串校验,这里记录一下. <html> <head> <script type="text/javascript"> funct ...

  8. easyui +ASP.NET 前后台乱码解决方法

    前端接口 decodeURIencodeURI 后台接口 System.Web.HttpUtility.UrlEncode(user.name) 凡是涉及到中文的地方都要使用这几个接口

  9. 解析eml文件

    之前使用lumisoft解析eml,总是会出现很奇怪的问题,所以改使用微软自家的com库,确实厉害兼容性更好,代码 string file = emailPath; CDO.Message oMsg ...

  10. 用jstl标签判断一个字符串是否包含了另一个字符串

    <c:if test="${fn:contains(str1,str2)}">