js 高级函数 之示例
js 高级函数
作用域安全构造函数
function Person(name, age)
{
this.name = name;
this.age = age;
}
var person1 = Person("lin3615", 26);
//alert(window.name); // lin3615
alert(person1.name); // 出错,此时成了全局的了
========================
function Person(name, age)
{
this.name = name;
this.age = age;
}
var person1 = new Person("lin3615", 26);
//alert(window.name); // 为空
alert(person1.name); // lin3615
================
为了防止没有使用 new 时实例化,出现跨域,可用以下方法
function person(name, age)
{
if(this instanceof person)
{
this.name = name;
this.age = age;
}else
{
return new person(name,age);
}
}
var person1 = person("lin3615", 26);
//alert(window.name); // 为空
alert(person1.name); // lin3615
=========================
以下代码中 Polygon 构造函数是安全的,然后 Rectangle 构造函数则不是,一个 Rectangle 实例之后,这个实例应该通过
Polygon.call() 来继承 Polygon 的 sides 属性。但由于 Polygon
构造函数是作用域是安全的, this 对象并非 Polygon 的实例。所以
会创建并返回一个新的 Polygon 对象
function Polygon(sides)
{
if(this instanceof Polygon)
{
this.sides = sides;
this.getArea = function (){
return 0;
};
}else
{
return new Polygon(sides);
}
}
function Rectangle(width, height)
{
Polygon.call(this, 2);
this.width = width;
this.height = height;
this.getArea = function(){
return this.width *
this.height;
};
}
var rect = new Rectangle(5, 10);
alert(rect.sides); // undefined
如果结合原型链则可以解决这个问题
function Polygon(sides)
{
if(this instanceof Polygon)
{
this.sides = sides;
this.getArea = function (){
return 0;
};
}else
{
return new Polygon(sides);
}
}
function Rectangle(width, height)
{
Polygon.call(this, 2);
this.width = width;
this.height = height;
this.getArea = function(){
return this.width *
this.height;
};
}
Rectangle.prototype = new Polygon();
var rect = new Rectangle(5, 10);
alert(rect.sides); // 2
js 高级函数 之示例的更多相关文章
- js高级-函数的四种调用模式
1.对象方法调用模式 方法内部的this指向当前调用者的对象d 定义类 (构造函数) function Dog (dogName){ //创建一个空对象 让空对象==this this.name ...
- js高级-函数变量提升
var a = 10; function f1(){ console.log(a) //undefined 函数变量提升了 函数执行之前想创建了函数的EC 把函数里面声明的变量初始化undefine ...
- JS高级——函数的调用模式
函数调用模式一共有四种 <script> //1.函数模式 //this指向window全局对象 //2.方法模式 //this指向调用这个方法的对象 //3.构造函数模式 //this ...
- JS高级 — 函数中的this指向问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- JS高级 — 函数的声明和表达式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- JS高级---函数作为返回值使用拓展,排序
函数作为返回值使用拓展,排序 排序, 每个文件都有名字,大小,时间,都可以按照某个属性的值进行排序 函数作为返回值 函数作为参数 //排序,每个文件都有名字,大小,时间,都可以按照某个属性的值进行排序 ...
- JS高级---函数作为参数使用
函数作为参数使用 var arr = [1, 100, 20, 200, 40, 50, 120, 10]; //排序 arr.sort(); console.log(arr); 排序---函数作为参 ...
- JS高级---函数作为返回值使用
函数作为返回值使用 function f1() { console.log("f1函数开始"); return function () { console.log("函数 ...
- JS高级---函数的几个成员
函数的几个成员 函数中有一个name属性----->函数的名字, name属性是只读的, 不能修改 函数中有一个arguments属性--->实参的个数 函数中有一个length属性--- ...
随机推荐
- Arrays.sort源代码解析
Java Arrays.sort源代码解析 Java Arrays中提供了对所有类型的排序.其中主要分为Primitive(8种基本类型)和Object两大类. 基本类型:采用调优的快速排序: 对象类 ...
- Spark RDD/Core 编程 API入门系列之map、filter、textFile、cache、对Job输出结果进行升和降序、union、groupByKey、join、reduce、lookup(一)
1.以本地模式实战map和filter 2.以集群模式实战textFile和cache 3.对Job输出结果进行升和降序 4.union 5.groupByKey 6.join 7.reduce 8. ...
- Jetty容器集群配置Session存储到MySQL、MongoDB
在Web开发中,Session表示HTTP服务器与客户端(例如浏览器)的"会话",每个客户端会有其对应的Session保存在服务器端,通常用来保存和客户端关联的一些信息,例如是否登 ...
- Oracle的SCN与检查点机制
Oracle的SCN与检查点机制 SCN在Oracle的文档上以多种形式出现,一种是System Change Number,另一种是System Commit Number,在大多数情况下,Syst ...
- 动态规划入门——Eddy's research II
转载请注明出处:http://blog.csdn.net/a1dark 分析:找规律 #include<stdio.h> int main(){ int m,n; while(scanf( ...
- 追踪CPU跑满 堆栈调试
http://blog.donghao.org/2014/04/24/%E8%BF%BD%E8%B8%AAcpu%E8%B7%91%E6%BB%A1/
- Python 基础学习
http://www.cnblogs.com/Wxtrkbc/p/5486253.html
- careercup-栈与队列 3.1
3.1 描述如何只用一个数组来实现三个栈. 解答 我们可以很容易地用一个数组来实现一个栈,压栈就往数组里插入值,栈顶指针加1: 出栈就直接将栈顶指针减1:取栈顶值就把栈顶指针指向的单元的值返回: 判断 ...
- Linux下Wireshark普通用户不能获取网络接口问题
Linux下Wireshark普通用户不能获取网络接口问题 1.安装setcap, setcap 是libcap2-bin包的一部分,一般来说,这个包默认会已经装好. sudo apt-get ins ...
- Android(java)学习笔记176:BroadcastReceiver之 短信发送的广播接收者
有时候,我们需要开发出来一个短信监听器,监听用户发送的短信记录,下面就是一个案例,这里同样需要使用广播机制. 下面同样是代码示例,MainActivity.java 和 activity_main. ...