<!--面向对象的程序设计-->
<!--<script type="text/javascript" >
//创建对象
var person = new Object();
person.name = "张三";
person.age = 21;
person.job = "Net";
person.sayName = function () { alert(this.name); }
// person.sayName();
//工厂模式
function createPerson(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function () { alert(this.name); }
return o;
};
var personOne = createPerson("里斯", 21, "Java");
var personTwo = createPerson("赵六", 21, "Java");
// personOne.sayName();
// personTwo.sayName();
//构造函数模式
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function () { alert(this.name); }
}
var person1 = new Person("王哥", 21, "Net")
// person1.sayName();
//把构造函数当作普通函数
Person("亲爱的", 21, "Java");
// window.sayName();
//在另一个函数的作用域中调用
var o = new Object();
Person.call(o, "王武", 21, "Net");
// o.sayName();
</script>-->
<!--构造函数的问题-->
<!--<script type="text/javascript">
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
var sayName = function () { alert(this.name); }
var person = new Person("无敌", 21, "Net");
// person.sayName();
alert(person instanceof Object);
alert(person instanceof Person);
</script>-->
<!---原型模式-->
<!--<script type="text/javascript">
function Person() { }
Person.prototype.name = "顺利";
Person.prototype.age = 12;
Person.prototype.job = "JS";
Person.prototype.sayName = function () { alert(this.name); }
var person = new Person();
person.sayName();
//原型和in操作符
var person1 = new Person();
var person2 = new Person();
alert(person1.hasOwnProperty("name")); //判断name属性是否属于peron1实例
alert("name" in person1); //使用in操作符,无论属性存在宇当前实例还是实例原型都返回true
//判断对象是否存在原型中
function hasPrototype(object, name) {
return !object.hasOwnProperty(name) && (name in object);
}
alert(hasPrototype(person1, "name"))
person1.name = "";
// alert(person1.hasOwnProperty("name"));
</script>-->
<!--更简单的原型语法-->
<!-- <script type="text/javascript">
function Preson() { };
// Preson.prototype = {
// naem: "孤独",
// agg: 21,
// job: "Net",
// sayName: function () { alert(this.name); }
// };
// var person1 = new Preson();
//alert(person1 instanceof Object);
//alert(person1 instanceof Preson);
//因为重写了原型,所以实例的构造函数不再指向原型 弹出 false
// alert(person1.constructor == Preson);
//alert(person1.constructor == Object);
Preson.prototype = {
constructor: Preson,
name: "孤独",
agg: 21,
job: "Net",
sayName: function () { alert(this.name); }
};
var person1 = new Preson();
//因为重写了原型,所以实例的构造函数不再指向原型 弹出 false
alert(person1.constructor == Preson);
alert(person1.constructor == Object);
</script>-->
<!---原型的动态性-->
<!--<script type="text/javascript">
function Person() { };
var person1 = new Person();
Person.prototype.sayHi = function () { alert("Hi"); };
person1.sayHi();
</script>-->
<!--原生对象的原型:String、Array、Object....-->
<!-- <script type="text/javascript">
//原型模式的重要性不仅体现在创建自定义类型方面,就连所有原生的引用类型,都是采用这种模式创建的,所有原生引用类型(Object \ Array \ String \ )等等都是在其构造函数的原型上定义了方法,例如:在Array.prototype中可以找到sort方法
//alert(typeof Array.prototype.sort);
//为原生对象添加方法
String.prototype.star = function () { alert("为原生对象添加方法"); }
var msg = "";
msg.star();
</script>-->
<!--原生对象的问题: 存在引用类型时,多个实例公用同一个引用类型-->
<!--<script type="text/javascript">
function Person() { };
Person.prototype = {
name: "",
age: 12,
job: "",
friends: ["王武", "里斯"],
sayName: function () { alert(this.name); }
}
var person1 = new Person();
var person2 = new Person();
person1.friends.push("赵六");
alert(person1.friends);
alert(person2.friends);
</script>-->
<!--组合使用构造函数模式和原型模式:构造函数:共享属性,重写prototype共享方法-->
<!--<script type="text/javascript">
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
this.friends = ["Shelby", "Count"]
}
Person.prototype = {
constructor: Person,
sayName: function () {
alert(this.name);
}
};
var person1 = new Person("1", 12, "");
var person2 = new Person("2", 12, "");
person1.friends.push("里斯");
person2.friends.push("小小");
alert(person1.friends);
alert(person2.friends);
</script>-->
<!--动态原型模式-->
<!--<script type="text/javascript">
//只有在sayName()不存在的情况下,才会将它添加到原型中,注意这段代码只会在初次调用构造函数是才会执行,此后,原型已经完成初始化,不需要在做什么修改了,不过要记住这里对原型所做的修改,能够立即在所有实例中得到实例
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
if (typeof this.sayName != "function") {
Person.prototype.sayName = function () {
alert(this.name);
}
}
}
var person1 = new Person("213123", 12, "Net");
person1.sayName();
</script>-->
<!---寄生构造函数模式-->
<script type="text/javascript">
function Person(name, age, job) {
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayName = function () { alert(this.name); }
return o;
}
var person1 = new Person("1", 12, "");
person1.sayName();
var person2 = new Person("2", 12, "");
person2.sayName();
function SpeialArray() {
var values = new Array();
values.push.apply(values, arguments);
values.toPipedString = function () { return this.join("|"); }
return values;
}
var colors = new SpeialArray("red", "blue", "green");
alert(colors.toPipedString());
</script>
javascript OOP
猜你喜欢
转载自blog.csdn.net/wzq806341010/article/details/8222489
今日推荐
周排行