javascript原型按不同类型编写

时间:2018-05-18 03:06:15

标签: javascript

为什么这段代码有效:!!!!!!

var Class = new MyClass();

function MyClass() {}

var Class1 = new MyClass();

function Class1() {}

console.log(Class1.prototype == Class.prototype);

MyClass.prototype.sayName = function() {
  alert("abc");
};

Class.sayName();

但是这个不起作用。系统一直告诉我sayName未定义但如果我声明了一个函数,系统会在执行代码之前先读取它吗?

function sayName() {
  alert("abc");
}

MyClass.prototype.sayName();
Class.sayName();

2 个答案:

答案 0 :(得分:0)

您的代码正在尝试调用不存在的函数:

@Test

相反,您打算将以前定义的函数分配给MyClass类:

MyClass.prototype.sayName();

现在你可以打电话给它:

MyClass.prototype.sayName = sayName; 

答案 1 :(得分:0)

在第一个代码块中,您将一个匿名函数分配给prototype.sayName属性。在第二个代码块中,您将声明该函数,但不将其分配给原型。 ' MyClass.protocol.sayName()'当错误可能被抛出。被调用,因为sayName未在' MyClass.protocol'

中声明

尝试以下方法:



var sayName = function() {
       alert("abc");
    }
    function sayHello() {
        alert("hello");
    }
    function MyClass() {};
    
    MyClass.prototype = {
      constructor: MyClass,
      sayName: sayName,
      sayHello: sayHello
    }

    var myClass = new MyClass();
    myClass.sayName();
    myClass.sayHello();
    
    alert(sayHello.__proto == myClass.sayHello.__proto);