语法——原型prototype深入理解
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深入理解的更多相关文章
- 原型prototype -- 深入理解javascript
/* 原型Prototype */ //一.原型 //原型使用一 var calculator = function (dlg, tax) { this.dlg = dlg; this.tax = t ...
- 简单理解javascript的原型prototype
原型和闭包是Js语言的难点,此文主要讲原型. 每一个方法都有一个属性是 prototype 每一个对象都有一个属性是 _proto_ 一旦定义了原型属性或原型方法,则所有通过该构造函数实例化出来的所有 ...
- 构造函数、原型对象prototype、实例、隐式原型__proto__的理解
(欢迎一起探讨,如果有什么地方写的不准确或是不正确也欢迎大家指出来~) PS: 内容中的__proto__可能会被markdown语法导致显示为proto. 建议将构造函数中的方法都定义到构造函数的原 ...
- 关于构造函数和原型prototype对象的理解
构造函数 1.什么是构造函数 构造函数,主要用于对象创建的初始化,和new运算符一起用于创建对象,一个类可以有多个构造函数,因为函数名相同,所以只能通过参数的个数和类型不同进行区分,即构造函数 ...
- 对原型(prototype)理解?
Javascript是一种通过原型实现继承的语言,与别的高级语言是有区别的,像Java,C#是通过类型决定继承关系的,JavaScript是的动态的弱类型语言,总之可以认为JavaScript所有都是 ...
- 关于JS对象原型prototype与继承,ES6的class和extends · kesheng's personal blog
传统方式:通过function关键字来定义一个对象类型 1234567891011 function People(name) { this.name = name}People.prototype. ...
- 关于 this 和 prototype 的理解
1:this 的理解比较好的书是 <Javascript语言精粹> 平时我们全局写 var a = 1, 其实就是 window.a = 1; var f = function(){}, ...
- 类(class)、构造函数(constructor)、原型(prototype)
类 Class 类的概念应该是面向对象语言的一个特色,但是JavaScript并不像Java,C++等高级语言那样拥有正式的类,而是多数通过构造器以及原型方式来仿造实现.在讨论构造器和原型方法前,我可 ...
- 悟透Javascript之 原型prototype
构造函数的Prototype上定义的方法确实可以通过对象直接调用,而且代码是共享的.我表示我不懂.太难理解了,艹.在Javascript中,prototype不但能让对象共享自己的财富,而且proto ...
随机推荐
- IIS回收后首次访问慢问题
禁用时间间隔回收 设置为0 然后设置指定时间回收 0:00:00 然后设置脚本 @echo off @echo 正在关掉所有的IE进程(需要设置默认浏览器是IE) taskkill /im iexpl ...
- 通过泛型来简化findViewById
我们一般写findViewById都要加个强制转换,感觉很麻烦,现在你可以在你的BaseActivity中写入如下方法: @SuppressWarnings(“unchecked”) public f ...
- 在SQLite中使用事务
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果为成功则提交事务,否则回滚 ...
- JS判断图片加载完成方法
javascipt原生方法 选取指定ID的图片,通过onload指定回调方法,在图片加载完成后弹出“图片加载已完成”字样提示. <img id="pic1" src=&quo ...
- 【JAVA与C#比较】其它
从语言方面的知识点来说,这应该是最后一篇有关java和C#的比较了.如果要了解两者具体各知识点的异同,请查看前面的相关文章,不过后面有可能存在,不能放到前面文章所列知识点的情况,应该就会补充到这里吧. ...
- 显卡、显卡驱动、CUDA、cuDNN之间的关系
作者:冬瓜哥链接:https://www.zhihu.com/question/59184480/answer/166167659来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- Apache的三种工作模式
Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式. 它们分别是prefork,worker和event,它们同时也代表这Apac ...
- Ember.js 1.0 RC6 发布,JavaScript 框架
Ember.js 1.0 发布了第 6 个 RC 版本,下载地址:https://github.com/emberjs/ember.js/tree/v1.0.0-rc.6 该版本包含众多的改进记录,详 ...
- 远程连接Oracle数据库
ylbtech-Oracle:远程连接Oracle数据库 所谓远程连接Oracle数据库,是指Oracle数据库服务器和Oracle客户端分别安装在2台电脑上,我们使用Oracle客户端来连接在另一 ...
- jstorm简介
最近在研究jstorm,看了很多资料,所以也想分享出来一些. 安装部署 zeromq 简单快速的传输层框架,安装如下: wget http://download.zeromq.org/zeromq-2 ...