原型prototype -- 深入理解javascript
/*
原型Prototype
*/
//一、原型
//原型使用一
var calculator = function (dlg, tax)
{
this.dlg = dlg;
this.tax = tax;
}
calculator.prototype = {
add: function (x, y) {
return x + y;
},
subtrac: function (x, y) {
return x - y;
}
}
//原型使用二
//封装私有函数
calculator.prototype = function () {
add = function (x, y) {
return x + y;
},
subtract = function (x, y) {
return x - y;
}
return {
add: add,
substract: subtract
}
}();
//分开设置原型的每个属性
calculator.prototype.add = function (x, y) { };
calculator.prototype.substract = function (x, y) { }; var cal = function () {
this.tax = 5;
};
cal.prototype = new calculator(); //cal的原型指向calculator的实例上,让cal继承两个函数
//无论创建多少个cal实例,都指向同一个对象
var newCal = new cal();
newCal.dlg;
//不想访问calculator的构造函数声明的属性值dlg
cal.prototype = calculator.prototype;
cal.dlg//报错
//重写原型
//覆盖前面的add方法
calculator.prototype.add = function (x, y) {
return x + y + this.tax;
};
var calc = new calculator();
calc.add(1, 1); //二、原型链
function Foo() {
this.value = 42;
}
Foo.prototype = {
method: function () { }
};
function bar() { }
bar.prototype = new Foo();
bar.prototype.foo = 'hello';
//?
bar.prototype.constructor = bar;
var test = new bar(); /*
原型链
test[bar实例]
bar.prototype [foo实例]
{foo:'hello'}
foo.prototype
{method:...};
Object.prototype
{toString:....}
*/
//属性查找
function foo() {
this.add = function (x, y) {
return x + y;
}
}
foo.prototype.add = function (x, y) {
return x + y + 10;
}
var f = new foo();
f.add(1, 2) //3, 先找自身属性,再往上找,直到object,如果没有,返回undefined. for in 效率问题 foo.prototype = 1;//错误,不能赋值原子类型的值 //hasOwnProperty函数,唯一一个处理属性不查找原型链的函数
Object.prototype.bar = -1;
var foo = { goo: undefined };
'bar' in foo //true,查找原型链
foo.hasOwnProperty('bar');//false 未查找原型链 foo.hasOwnProperty('goo');//true
//hasOwnProperty不受保护,可能会被非法占用命名,需要使用外部的hasOwnProperty来获取正确结果
var foo = { hasOwnProperty: function () { return false; }, bar: 'Here be dragons' }; foo.hasOwnProperty('bar'); // 总是返回 false
// 使用{}对象的 hasOwnProperty,并将其上下为设置为foo
var my = {};
my.hasOwnProperty.call(foo, 'bar');
原型prototype -- 深入理解javascript的更多相关文章
- 语法——原型prototype深入理解
console.log('-----------------------------Object'); var obj = {}; console.log(obj.__proto__ === Obje ...
- 深入理解JavaScript系列
转自http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html 深入理解JavaScript系列(1):编写高质量JavaScript代码 ...
- 深入理解JavaScript系列(转自汤姆大叔)
深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaScript系列(1):编写高质量JavaScript ...
- [转]深入理解JavaScript系列
文章转自:汤姆大叔-深入理解JavaScript系列文章 深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解Ja ...
- [转载]深入理解JavaScript系列 --汤姆大叔
深入理解JavaScript系列文章,包括了原创,翻译,转载,整理等各类型文章,如果对你有用,请推荐支持一把,给大叔写作的动力. 深入理解JavaScript系列(1):编写高质量JavaScript ...
- 深入理解JavaScript系列(转载)
深入理解JavaScript系列 深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaSc ...
- 深入理解javascript原型和闭包(3)——prototype原型
既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...
- 深入理解JavaScript原型:prototype,__proto__和constructor
JavaScript语言的原型是前端开发者必须掌握的要点之一,但在使用原型时往往只关注了语法,其深层的原理并未理解透彻.本文结合笔者开发工作中遇到的问题详细讲解JavaScript原型的几个关键概念, ...
- 深入理解javascript原型和闭包(3)——prototype原型 (转载)
深入理解javascript原型和闭包(3)——prototype原型 既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的 ...
随机推荐
- CS异步下载
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Linux常用命令英文全称与中文解释Linux系统
Linux常用命令英文全称与中文解释Linux系统(转) Linux常用命令英文全称与中文解释Linux系统 man: Manual 意思是手册,可以用这个命令查询其他命令的用法. pwd:Pri ...
- 使用Struts2 验证框架,验证信息重复多次出现
版权声明:本文为博主原创文章,未经博主允许不得转载. 问题描述:第一次提交表单.某个数据不符合规则,就会出现一条错误信息.再次提交,上次显示的错误信息不消失,又多出一条一模一样的错误信息.提交几次,就 ...
- linux下usb驱动接口中端点介绍
端点 USB 通讯的最基本形式是通过一个称为端点的东西.一个USB端点只能向一个方向传输数据(从主机到设备(称为输出端点)或者从设备到主机(称为输入端点)).端点可被看作一个单向的管道. 一个 USB ...
- JavaScript写选项卡
方法一: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- EasyUI form ajax submit到MVC后,在IE下提示下载内容的解决办法
问题描述: 项目环境为,.Net Mvc5+EF6……前端框架使用的是EasyUI v1.4.4. 在视图页面中,使用form的submit方法提交表单数据时,如果是使用IE的话,请求成功后IE会提示 ...
- MySQL之左连接与右连接
左连接: select 列1,列2,列N from tableA left join tableB on tableA.列 = tableB.列(正常是一个外键列) [此处表连接成一张大表,完全当成一 ...
- 济南学习 Day 3 T2 pm
LYK 快跑!(run)Time Limit:5000ms Memory Limit:64MB题目描述LYK 陷进了一个迷宫! 这个迷宫是网格图形状的. LYK 一开始在(1,1)位置, 出口在(n, ...
- 【风马一族_windom】 批量修改相同文件类型的后缀
难题:有时因为某种原因,修改一堆文件的类型,重复操作次数多,浪费时间也跟着多,收获也会相当少. 提问:对于软件而言,可量化的,有规律的操作,可以使用程序来进行替代. 特性:在微软操作系统上,不同后缀的 ...
- 扩展 delphi 线程 使之传递参数.
新delphi的线程TThread有了CreateAnonymousThread方法,如果再为它加一个可传递的参数不就更好了吗?代码如下: TAnonymousThreadX<T> = c ...