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. Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载

    在使用这个框架的时候,我们必须要配置一个DisplayImageOptions对象来作为ImageLoader.getInstance().displayImage()中的参数,所以很有必要讲解这个对 ...

  2. JavaScript中的方法、方法引用和参数

    首先,我们来看一段代码,如果觉得不甚明白的,则本文会对你有益: var player = function (e) {             return (function f(m) {      ...

  3. Unexpected identifier in composer-common/lib/cardstore/businessnetworkcardstore.js:54

    c错误描述 Unexpected identifier in composer-common/lib/cardstore/businessnetworkcardstore.js:54 yo hyper ...

  4. smb与samba

    为了使Windows 主机间的资源能够共享,微软于1980年开发了SMB(Server Message Block)通信协议,并通过SMB通信协议,使网络上各台主机之间能够共享文件.打印机等资源.目前 ...

  5. Django的事务性

    Django默认是自动提交的 使用TestCase的每个test用例都是事务性的.如果不想这样,可以使用TransactionTestCase 替代 Django自动保证delete()/update ...

  6. GridControl常见用法【转】

    刚接触DevExpress第三方控件,把GridControl的常见用法整理一下,以供参考: 说明: gcTest   GridControl gvText    GridView //隐藏最上面的G ...

  7. 2018.08.28 ali 梯度下降法实现最小二乘

    - 要理解梯度下降和牛顿迭代法的区别 #include<stdio.h> // 1. 线性多维函数原型是 y = f(x1,x2,x3) = a * x1 + b * x2 + c * x ...

  8. 自定义View 可清除内容、设置图标、下划线的输入框 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  9. 10 个非常有用的 SVG 动画的 JavaScript 库

    SVG 通常可以用作跨分辨率视频.这意味着在一块高分屏幕上不会降低图片的锐度.此外,你甚至可以让SVG动起来,通过使用一些javascript类库.下面,我们分享一些javascript类库,这些类库 ...

  10. python用post访问restful服务接口

    具体代码如下: import requests import json data={"]} url="http://XXXXX" data_json = json.dum ...